请问C++静态变量我使用上有什么错误?

class classmate
{
private:
    string name;
    string sex;
    string num;
    string tel;
    string e_mail;
public:
    classmate(string N,string S,string Nu, string T,string E):
      name(N),sex(S),num(Nu),tel(T),e_mail(E){}
     classmate(){}
    static int count;
    void input(string N,string S,string Nu, string T,string E)
    {
        name=N;
        sex=S;
        num=Nu;
        tel=T;
        e_mail=E;
    }
    void output()
    {
        cout<<name<<"\t"<<sex<<"\t"<<num<<"\t"<<tel<<"\t"<<e_mail<<endl;
    }
    void insert()
    {
        cout<<"请输入该同学信息:"<<endl<<"\t姓名:"<<endl;
        cin>>name;
        cout<<"\t性别:"<<endl;
        cin>>sex;
        cout<<"\t学号:"<<endl;
        cin>>num;
        cout<<"\t联系电话:"<<endl;
        cin>>tel;
        cout<<"\t电子邮箱:"<<endl;
        cin>>e_mail;
    }

    string o_name(){return name;}
    string o_num() {return num ;}

    friend ostream & operator<<(ostream &os, classmate & stu)
    {
       os<<stu.name<<"\t"<<stu.sex<<"\t"<<stu.num<<"\t"<<stu.tel<<"\t"<<stu.e_mail<<endl;
       return os;
    }
};



int main()
{
    int classmate::count=0;
    system("color 31");
    ofstream file;
    file.open("同学录系统.txt",ios::out|ios::app);
    if(!file) 
    {   
       system("color 35");
       cout<<"对不起,文件打开失败!"<<endl; 
       abort();
    }
    cout<<"打开文件成功!"<<endl;
    int n=1;
    while(n)
    {
        menu();
        cin>>n;
        system("cls");
        switch(n)
        {
           case 1:inSert(); break;
           case 2:browse(); break;
           case 3:find();break;
           case 4:delet();break;
           case 5:exit();
                  int e_n;
                  cin>>e_n;
                  if(e_n==1){ n=0;break;}
                  if(e_n==2){ n=1;system("cls");break;}
        }
    }
    file.close();
    system("cls");
    cout<<"您已成功退出系统,感谢您的使用!"<<endl;
    return 0;
}


静态变量在声明的时候就应该要初始化。

类成员变量(在这里是num变量)只声明而未定义,此变量的定义需放在类的定义之外,且最好放到cpp文件中,放在头文件中易造成重复定义。

先分清声明(speccification)与定义(defination)的区别。声明的作用是告知符号(变量名、函数名、对象名)的存在性,定义的作用包含声明声明,此外有其他功能,对于变量是分配内存空间,对于类是给出实现,对于函数是给出实现。在你的代码里,num变量处于类定义之内,属于声明,但没有给出定义

在类外加一句
int classmate::count;

静态成员有作用域 , 楼上正解

错了 , 静态成员要在成员方法里面初始化!!!

在类外 添加 int classmate::count=0; 类外进行定义 和 初始化,类内 只是声明

#include
using namespace std;
class A
{
public:
static void fun()
{
ab=2;
cout<<ab<<endl;
}
private:
static int ab;
};
int A::ab=10;//此处为初始化
int main(int argc,char *argv[])
{
A::fun();
system("pause");
}
类中只是起声明作用