84669인 학습
152542인 학습
20005인 학습
5487인 학습
7821인 학습
359900인 학습
3350인 학습
180660인 학습
48569인 학습
18603인 학습
40936인 학습
1549인 학습
1183인 학습
32909인 학습
如果可以,如何实现?
比如,Student类中有一个满分标准是需要用户输入的Class Student{int static StandardFullScore;}貌似cin >> Student :: StandardFullScore;
和构建一个对象后Student s;然后 cin >> s.StandardFullScore;
这两种方法都不行?
是不是本来这么做就是不可以的呢?
欢迎选择我的课程,让我们一起见证您的进步~~
#include<iostream> using namespace std; class Demo{ public: int a; static int c; }; static int b; int main(){ Demo d=Demo(); cin>>b; cout<<"b="<<b<<endl; cin>>d.a; cout<<"the result="<<d.a<<endl; //cin>>Demo::c; //error //cout<<"c="<<Demo::c<<endl; //error //Demo::c=3; //error //int Demo::c=3; //ok d.a=3; //ok //cout<<"c="<<Demo::c<<endl; //error return 0; }
首先c++中规定类的静态成员变量必须是在类中声明,在类外定义,从上面注释的处看到,直接调用赋值语句
Demo::c=3
是错误的,编译器提示不知道c的类型。在来看输入cin>>Demo.c这样为啥不行呢,可以知道,内部首先是转换成basic_istream(cin,&c),而此时编译器并不知道静态成员变量c是什么类型,traits特性不能特化成功,因此调用失败。
那么,这里替代做法就是输入一个变量,然后通过赋值或者成员函数来设置Student :: StandardFullScore;即可
怀疑题主只是忘记定义静态变量了,静态变量在类中是声明,如果只声明未定义但不调用是不会有问题的,但如果未定义还使用了这个变量,就会编译错误了。
#include <cstdio> #include <iostream> using namespace std; class zz{ public: static int b;//声明静态变量 }; int zz::b;//定义静态变量 int main() { cin>>(zz::b);//正常使用 cout<<(zz::b); return 0; }
首先c++中规定类的静态成员变量必须是在类中声明,在类外定义,从上面注释的处看到,直接调用赋值语句
是错误的,编译器提示不知道c的类型。在来看输入cin>>Demo.c这样为啥不行呢,可以知道,内部首先是转换成basic_istream(cin,&c),而此时编译器并不知道静态成员变量c是什么类型,traits特性不能特化成功,因此调用失败。
那么,这里替代做法就是输入一个变量,然后通过赋值或者成员函数来设置Student :: StandardFullScore;即可
怀疑题主只是忘记定义静态变量了,静态变量在类中是声明,如果只声明未定义但不调用是不会有问题的,但如果未定义还使用了这个变量,就会编译错误了。