2013-12-15 94 views
0

在这段代码中,我不知道编译器为什么不让我将值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表::总和= 0,程序工作得很好。我只是不明白为什么。 我感谢任何帮助!

+0

_你有什么错误? – SLaks

回答

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静态数据成员
的声明其类定义中的静态数据成员是 不是定义,可能是不完整的类型ot她比 cv-qualified void。静态数据成员 的定义应出现在包含成员类 定义的名称空间范围内。在名称空间范围的定义中,静态数据成员的名称应使用:: 运算符通过其类名进行限定。静态数据成员定义中的初始化表达式在其类 (basic.scope.class)的范围内。

+0

非常感谢,现在它是有道理的。它对理解静态变量有很大的帮助! – Flaviola

0

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