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

Posted

技术标签:

【中文标题】方法不能访问同一类的成员变量 (C++)【英文标题】:A method can't access a member variable of the same class (C++) 【发布时间】:2014-01-25 17:17:42 【问题描述】:

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

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

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

【问题讨论】:

+1 用于省略所有没有问题的代码。 你需要void Car::fuelUp(double fuel)... 好的,谢谢。我发誓我为这种错误阅读了大约十次代码。 已建议但不适用于这种情况:***.com/questions/46943651/… 【参考方案1】:

该函数应该写成Car类的成员

void Car::fuelUp(double fuel)

    fuelLevel += fuel;

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

【讨论】:

【参考方案2】:

这个

void fuelUp(double fuel)

    Car::fuelLevel += fuel;

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

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

void Car::fuelUp(double fuel)

    Car::fuelLevel += fuel;

【讨论】:

【参考方案3】:

您编写Car::fuelLevel += fuel 的方式是尝试访问变量fuelLevel,就好像它是static。您需要将该变量设置为static,或者更可能是您的意思是创建方法

void Car::fuelUp(double fuel)

    fuelLevel += fuel;

如果您的原始代码错误的原因更加清楚,您也可以将其更改为:

void Car::fuelUp(double fuel)

    this->fuelLevel += fuel;

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

【讨论】:

【参考方案4】:

在类外定义函数时,必须将函数引用到某个类。所以你应该在定义函数之前写Car。格式必须为void car::fuelUp(double fuel)

【讨论】:

以上是关于方法不能访问同一类的成员变量 (C++)的主要内容,如果未能解决你的问题,请参考以下文章

C++中子类从基类都继承啥?

C++中子类的变量能不能覆盖父类的变量?

C++中类里面定义 静态成员变量的问题

C++中类的静态成员变量

C++ 使用变量访问类的公共成员

关于C++静态成员函数访问非静态成员变量的问题