2010-04-10 62 views
2

我在这里做错了什么?我一直得到一个编译错误,当我尝试在代码实验室(turings工艺)运行此类头+实现

说明:

写的实现(.cpp文件)的GasTank类上一个练习的。该类的完整规范是: 一个名为double类型的数据成员。 一个没有参数的构造函数。构造函数将数据成员量初始化为0. 一个名为addGas的函数,它接受double类型的参数。金额实例变量的值由参数的值增加。 一个名为useGas的函数,它接受double类型的参数。金额数据成员的值减少了参数的值。 一个名为getGasLevel的函数,它不接受任何参数。 getGasLevel返回金额数据成员的值。

class GasTank{ 
double amount; 
GasTank(); 
void addGas(double); 
void useGas(double); 
double getGasLevel();}; 

GasTank::GasTank(){ 
amount=0;} 
double GasTank::addGas(double a){ 
amount+=a;} 
double GasTank::useGas(double a){ 
amount+=a;} 
double GasTank::getGasLevel(){ 
return amount;} 
+4

两个'useGas'和'addGas'增加'amount' ...可能不是你的意图... – 2010-04-10 01:22:39

回答

1

您列出类的声明,其功能的实现两者。头文件中的代码部分是什么,它的哪部分是在实现文件中?

此外,回想一下class的默认可见度为private。因此,所有的函数都是私有的 - 包括构造函数! - 所以你不能实例化类的一个对象。尝试将相关功能的可见性更改为public

确保类声明中的函数签名和类定义匹配。所以,如果你申报

class GasTank { 
    // ... 
public: 
    void addGas(double); 
    // ... 
}; 

确保你定义

void GasTank::addGas(double d) 
{ 
    // ... 
} 

,而不是

double GasTank::addGas(double d) 
{ 
    // ... 
} 

最后一件事:做正确缩进代码。在阅读你的代码时,你的标记(和我们)会有一个很好的心情。

+0

我感到愚蠢。谢谢。 – codefail 2010-04-10 01:29:54

1

的访问模式class是默认private。你需要至少你的构造公众和可能的成员函数public

class GasTank 
{ 
    double amount; 
public: 
    GasTank(); 
    // ...  
}; 

的返回类型的定义也不一致的声明。

2

声明的返回值必须与您的定义的返回值相匹配。

所以,你想:

class GasTank 
{ 
public://<--- To use your GasTank you'll have to make the members public 
    GasTank();//<-- Especially the contructor 
    void addGas(double); 
    void useGas(double); 
    double getGasLevel(); 

private: 
    double amount; 
}; 

GasTank::GasTank() 
{//<--- read up on initializer lists so you can initialize amount here 
    amount=0; 
} 
void GasTank::addGas(double a) //<-- Return type fixed here 
{ 
    amount+=a; 
} 
void GasTank::useGas(double a) //<-- Return type fixed here 
{ 
    amount+=a;//<--- See something wrong here? 
} 
double GasTank::getGasLevel() 
{ 
    return amount; 
} 
0

有几件事情错在这里:

  1. 您声明useGas和addGas为返回“无效”,但在定义你说它返回“双”。
  2. 如果你打算返回'双',你不“返回”任何东西。
  3. 您需要为您的方法访问使用“public:”关键字,否则它默认为“private”:
  4. addGas和useGas都是递增量。
0

要完全准确,这将是正确的代码按说明书

class GasTank 
    { 
    public: 

    GasTank() 
    {amount=0;} 
    void addGas(double); 

    void useGas(double b) 
     {amount-=b;} 
    double getGasLevel() 
     {return amount;} 
    private: 
    double amount; 


    }; 

    void GasTank::addGas(double a) 
    {amount+=a;}