将值赋给静态变量时出错

时间:2013-12-15 20:49:44

标签: visual-c++

  

在这段代码中,我不知道为什么编译器不允许我将值0赋给变量x。我突出显示导致问题的那一行。

class List{
private:
    int p;
public:
    static int x;
    void total();
};

void List::total(List *a){
    x + = a -> p;
    cout<<x;
    getch();
    x=0; // problem here
}
  

我还注意到如果我在函数体之前编写int List :: sum = 0,程序就可以了。我只是不明白为什么。   我感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

运营商+=尝试增加x的值。在使用之前,您需要初始化x

答案 1 :(得分:0)

您已在类中声明了静态但尚未为其定义变量。

class List{
private:
    int p;
public:
    static int x;    // this is just a declaration
    void total();
};

您需要定义它,通常在关联的cpp文件中:

List::x = 0;        // define variable and initialise

引用from here

  

9.4.2静态数据成员
  在其类定义中声明静态数据成员是   不是定义,可能是不完整的类型   cv合格的空白。静态数据成员的定义   应出现在封闭成员类的命名空间范围内   定义。在命名空间范围的定义中,名称   静态数据成员应使用::的类名限定::   运营商。初始化表达式在a的定义中   静态数据成员属于其类的范围   ( basic.scope.class )。