类头+实现

时间:2010-04-10 01:18:58

标签: c++

我在这里做错了什么?当我尝试在codelab(turings craft)

中运行时,我继续遇到编译错误

说明:

编写上一练习的GasTank类的实现(.cpp文件)。该类的完整规范是: 名为amount of double的数据成员。 没有参数的构造函数。构造函数将数据成员数量初始化为0。 一个名为addGas的函数,它接受double类型的参数。 amount实例变量的值增加了参数的值。 一个名为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;}

5 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:1)

class的访问模式默认为private。您至少需要将构造函数设置为public,并且可能需要成员函数public

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

定义的返回类型也与声明不匹配。

答案 2 :(得分:1)

您列出了类声明及其函数实现。代码的哪一部分在头文件中,它的哪一部分在实现文件中?

另请注意,对于class,默认可见性为private。因此,您的所有功能都是私有的 - 包括构造函数! - 所以你不能实例化该类的对象。尝试将相关功能的可见性更改为public

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

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

确保定义

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

而不是

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

最后一件事:正确缩进代码。在阅读您的代码时,您(和我们)的心情会更高。

答案 3 :(得分:0)

这里有几个问题:

  1. 您声明useGas和addGas返回'void',但在定义中,您说它返回'double'。
  2. 如果您打算返回'double',则不会“返回”任何内容。
  3. 您需要使用“public:”关键字进行方法访问,否则默认为“private:”
  4. addGas和useGas都是增量。

答案 4 :(得分: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;}