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");
}
类中只是起声明作用