如果可以,如何实现?
比如,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;即可
懷疑題主只是忘記定義靜態變數了,靜態變數在類別中是聲明,如果只聲明未定義但不呼叫是不會有問題的,但如果未定義還使用了這個變量,就會編譯錯誤了。