찾다

 >  Q&A  >  본문

class - c++ 类中的static 成员变量可以通过cin输入吗

如果可以,如何实现?

比如,Student类中有一个满分标准是需要用户输入的
Class Student{
int static StandardFullScore;
}
貌似
cin >> Student :: StandardFullScore;


构建一个对象后Student s;
然后 cin >> s.StandardFullScore;

这两种方法都不行?

是不是本来这么做就是不可以的呢?

天蓬老师天蓬老师2802일 전607

모든 응답(2)나는 대답할 것이다

  • 伊谢尔伦

    伊谢尔伦2017-04-17 12:09:18

    #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;即可

    회신하다
    0
  • 阿神

    阿神2017-04-17 12:09:18

    怀疑题主只是忘记定义静态变量了,静态变量在类中是声明,如果只声明未定义但不调用是不会有问题的,但如果未定义还使用了这个变量,就会编译错误了。

    #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;
    }

    회신하다
    0
  • 취소회신하다