类c ++内部的静态成员未定义引用

时间:2014-03-01 22:37:38

标签: c++

为什么这段代码给我一个未定义的对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;
}

2 个答案:

答案 0 :(得分:1)

您有定义Student::count,违反了one definition rule。将定义放在一个且只有一个翻译单元中。

请注意,如果static int count; 定义,则几乎不可能使用静态成员。每次包含头文件时都会得到一个定义,这使得一个定义规则几乎不可能符合。

答案 1 :(得分:0)

在标题中写static int count;意味着:编译器,在某个地方你会发现一个作用于此类的变量,它将是int并且将被定义为count

现在,您需要在某处实际实例化(定义)变量。也许在您的情况下,将int Student::count;添加到主文件中就可以了。