为什么这段代码给我一个未定义的对student :: count的引用的错误。我正在使用静态计数,我知道静态成员默认为0,但不知道为什么给我一个错误。请解释一下。
#include <iostream>
using namespace std;
class Student{
static int count;
string name;
public:
Student(){
count++;
cout<<"I am student"<<count<<endl;
}
int getCount() const
{
return count;
}
void setCount(int x){
count=x;
}
};
int main(){
Student stud[20];
return 0;
}
答案 0 :(得分:1)
您有否定义Student::count
,违反了one definition rule。将定义放在一个且只有一个翻译单元中。
请注意,如果static int count;
是定义,则几乎不可能使用静态成员。每次包含头文件时都会得到一个定义,这使得一个定义规则几乎不可能符合。
答案 1 :(得分:0)
在标题中写static int count;
意味着:编译器,在某个地方你会发现一个作用于此类的变量,它将是int
并且将被定义为count
。
现在,您需要在某处实际实例化(定义)变量。也许在您的情况下,将int Student::count;
添加到主文件中就可以了。