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