方法无法访问同一类的成员变量 (C++)

A method can't access a member variable of the same class (C++)

本文关键字:一类 成员 C++ 变量 访问 方法      更新时间:2023-10-16

我写了一个简短的程序来说明我的学校项目的继承原则,但我遇到了一个奇怪的问题。这是我的代码:(我省略了所有不是问题的代码)

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)) ===|

我不知道这个错误意味着什么,我希望有人可以帮助我。

该函数应编写为类Car

的成员
void Car::fuelUp(double fuel)
{
    fuelLevel += fuel;
}

按照您编写它的方式,它无法访问Car中的任何成员变量,因为它与您在类中声明的函数不同。

void fuelUp(double fuel)
{
    Car::fuelLevel += fuel;
}

不是方法。它是与类中声明的方法同名的某个函数。如果 Car::fuelLevel 是类的公共静态数据成员,则此代码可以工作。

在类定义

之外定义方法时,应指定该方法所属的类。

void Car::fuelUp(double fuel)
{
    Car::fuelLevel += fuel;
}

Car::fuelLevel += fuel的方式是 triyng 访问可变燃料水平,就好像它是static一样。 你需要使该变量static或者,更有可能是你打算做的,是使方法

void Car::fuelUp(double fuel)
{
    fuelLevel += fuel;
}

如果它更清楚地说明了原始代码错误的原因,您还可以将其更改为:

void Car::fuelUp(double fuel)
{
    this->fuelLevel += fuel;
}

请注意,在第二个变体中,您正在通过 this-> 访问该字段,这在第一个版本中隐式发生。 您的版本通过类Car::访问该字段。

在类外定义函数时,必须将函数引用到某个类。因此,您应该在定义函数之前编写Car。它必须在表格上void car::fuelUp(double fuel)