我在这里做错了什么?当我尝试在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;}
答案 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)
这里有几个问题:
答案 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;}