[英]C++ public method inherited from base class can not access private member variable in derived class
[英]A method can't access a member variable of the same class (C++)
我寫了一個簡短的程序來說明我學校項目的繼承原則,但我遇到了一個奇怪的問題。 這是我的代碼:(我省略了所有不是問題的代碼)
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
任何成員變量,因為它與您在類中聲明的函數不同。
你寫它的方式Car::fuelLevel += fuel
是triyng來訪問變量fuelLevel,好像它是static
。 您需要將該變量設為static
或者更可能是您打算做的,就是制作該方法
void Car::fuelUp(double fuel)
{
fuelLevel += fuel;
}
如果它更清楚地說明原始代碼錯誤的原因,您還可以將其更改為:
void Car::fuelUp(double fuel)
{
this->fuelLevel += fuel;
}
請注意,在第二個版本中,您通過this->
訪問該字段,這隱含在第一個版本中。 您的版本讓它通過Car::
類訪問該字段。
這個
void fuelUp(double fuel)
{
Car::fuelLevel += fuel;
}
不是一種方法。 它是一些函數,與類中聲明的方法具有相同的名稱。 如果Car :: fuelLevel是該類的公共靜態數據成員,則此代碼可以工作。
在類定義之外定義方法時,應指定方法所屬的類。
void Car::fuelUp(double fuel)
{
Car::fuelLevel += fuel;
}
在類外定義時,必須將函數引用到某個類。 所以你應該在定義函數之前編寫Car
。 它必須是在形式void car::fuelUp(double fuel)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.