C2864编译器错误

Tak*_*aka 3 c++ visual-studio-2010

我正在做一些游戏,我得到以下错误:

class Apple:public Fruit{
public:
    bool isAppleOK = false;
Apple(int amount, int pHValue) {
    amount = amount;
    pHValue= pHValue;
} ~Apple() {
}
    /*code trimmed*/
Run Code Online (Sandbox Code Playgroud)

错误C2864:'Apple :: isAppleOK':只能在类中初始化静态const积分数据成员

我在这里错过了什么?

das*_*ght 11

这不是在C++中初始化成员变量的方式.您需要在构造函数的init列表中设置值:

Apple(int amount, int pHValue) : isAppleOK(false) {
    amount = amount;
    pHValue= pHValue;
}
Run Code Online (Sandbox Code Playgroud)

您还可以将其他变量的初始化移动到初始化列表中:

Apple(int amt, int pHv)
:   isAppleOK(false)
,   amount(amt)
,   pHValue(pHv) {
}
Run Code Online (Sandbox Code Playgroud)

  • @Takarakaka从类继承时,应该依赖基类的构造函数来对其成员进行初始化.如果有必要将参数传递给基类的构造函数以使其完成初始化,那么您也应该在初始化列表中传递它们.例如,如果你继承`class A:public B`,那么你可以这样做:`A :: A(int arg):B(arg),isValid(true){}`. (2认同)

Ed *_* S. 6

我在这里错过了什么?

你错过了这个:

只能在类中初始化静态const积分数据成员

isAppleOk一个静态const积分成员Apple吗?不,这不对.在构造函数的初始化列表中初始化它.

class Apple {
public:
    Apple() : isAppleOk(false) { }
private:
    bool isAppleOk;
}
Run Code Online (Sandbox Code Playgroud)