我写了一个简短的程序来说明我学校项目的继承原则,但我遇到了一个奇怪的问题。这是我的代码:(我省略了所有不是问题的代码)
class Car
{
protected:
double fuelLevel;
public:
void fuelUp(double);
};
void fuelUp(double fuel)
{
Car::fuelLevel += fuel;
}
这是构建日志:
||=== Build: Debug in wierdError (compiler: GNU GCC Compiler) ===|
||In function 'void fuelUp(double)':|
|4|error: 'double Car::fuelLevel' is protected|
|11|error: within this context|
|4|error: invalid use of non-static data member 'Car::fuelLevel'|
|11|error: from this location|
||=== Build failed: 4 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
我不知道这个错误意味着什么,我希望有人可以帮助我。
答案 0 :(得分:9)
该函数应该写成类Car
void Car::fuelUp(double fuel)
{
fuelLevel += fuel;
}
您编写它的方式,它无法访问Car
中的任何成员变量,因为它与您在类中声明的函数不同。
答案 1 :(得分:1)
您编写Car::fuelLevel += fuel
的方式非常适合访问变量fuelLevel,就好像它是static
一样。你需要制作变量static
,或者更有可能是你想要做的是制作方法
void Car::fuelUp(double fuel)
{
fuelLevel += fuel;
}
如果它更清楚地说明原始代码错误的原因,您也可以将其更改为:
void Car::fuelUp(double fuel)
{
this->fuelLevel += fuel;
}
请注意,在第二个版本中,您通过this->
访问该字段,这是在第一个版本中隐式发生的。您的版本让它通过课程Car::
访问该字段。
答案 2 :(得分:1)
此
void fuelUp(double fuel)
{
Car::fuelLevel += fuel;
}
不是一种方法。它是一些函数,与类中声明的方法具有相同的名称。如果Car :: fuelLevel是该类的公共静态数据成员,则此代码可以工作。
在类定义之外定义方法时,应指定方法所属的类。
void Car::fuelUp(double fuel)
{
Car::fuelLevel += fuel;
}
答案 3 :(得分:0)
在课堂外定义时,必须将函数引用到某个类。所以你应该在定义函数之前编写Car
。它必须位于void car::fuelUp(double fuel)