给静态变量赋值时出错
问题描述:
在这段代码中,我不知道编译器为什么不让我将值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,程序工作得很好。我只是不明白为什么。 我感谢任何帮助!
答
您已经在类中声明了静态,但尚未为其定义变量。
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
答
运营商+=
试图增加值x
。在使用之前,您需要初始化x
。
_你有什么错误? – SLaks