3

我正在制作一些游戏,但出现以下错误:

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

错误 C2864:“Apple::isAppleOK”:只能在类中初始化静态 const 整数数据成员

我在这里想念什么?

4

3 回答 3

11

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

Apple(int amount, int pHValue) : isAppleOK(false) {
    amount = amount;
    pHValue= pHValue;
}

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

Apple(int amt, int pHv)
:   isAppleOK(false)
,   amount(amt)
,   pHValue(pHv) {
}
于 2012-07-04T21:52:16.813 回答
6

我在这里想念什么?

你错过了这个:

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

isAppleOk的静态 const 整数成员Apple吗?不,这不对。在构造函数的初始化列表中对其进行初始化。

class Apple {
public:
    Apple() : isAppleOk(false) { }
private:
    bool isAppleOk;
}
于 2012-07-04T21:52:05.833 回答
2

您不能在声明中初始化变量。

class Apple: public Fruit{
public:
    bool isAppleOK;
    Apple(int amount, int pHValue) : amount(amount), pHValue(pHValue),
                                     isAppleOK(false)
    {
    } 

    ~Apple() {
    }
};

它不完全相关,但也使用初始化列表,因为您的编译器可能会翻译:

class Apple:public Fruit{
public:
    bool isAppleOK;
    Apple(int amount, int pHValue) {
    amount = amount;
    pHValue= pHValue;
    } 
    ~Apple() {
    }
};

class Apple:public Fruit{
    public:
        bool isAppleOK;
        Apple(int amount, int pHValue): amount(), phValue(), 
                                        isAppleOk() {
        amount = amount;
        pHValue= pHValue;
        } 
        ~Apple() {
        }
    };

如果您在构造函数中将复杂类型作为参数,则可能会在每个对象构造中产生一些开销,因为首先将初始化类成员,然后将其分配给新值。

使用初始化列表,这将同时完成,没有可能的开销。

于 2012-07-04T21:54:19.900 回答