在这段代码中,我不知道为什么编译器不允许我将值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,程序就可以了。我只是不明白为什么。 我感谢任何帮助!
答案 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 )。