为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

米琪卡哇伊 2019-04-19 16:29:43
如果可以,如何实现?比如,Student类中有一个满分标准是需要用户输入的ClassStudent{intstaticStandardFullScore;}貌似cin>>Student::StandardFullScore;和构建一个对象后Students;然后cin>>s.StandardFullScore;这两种方法都不行?是不是本来这么做就是不可以的呢?
查看完整描述

2 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

#include
usingnamespacestd;
classDemo{
public:
inta;
staticintc;
};
staticintb;
intmain(){
Demod=Demo();
cin>>b;
cout<<"b="<cin>>d.a;
cout<<"theresult="<//cin>>Demo::c;//error
//cout<<"c="<//Demo::c=3;//error
//intDemo::c=3;//ok
d.a=3;//ok
//cout<<"c="<return0;
}
首先c++中规定类的静态成员变量必须是在类中声明,在类外定义,从上面注释的处看到,直接调用赋值语句
Demo::c=3
是错误的,编译器提示不知道c的类型。在来看输入cin>>Demo.c这样为啥不行呢,可以知道,内部首先是转换成basic_istream(cin,&c),而此时编译器并不知道静态成员变量c是什么类型,traits特性不能特化成功,因此调用失败。
那么,这里替代做法就是输入一个变量,然后通过赋值或者成员函数来设置Student::StandardFullScore;即可
                            
查看完整回答
反对 回复 2019-04-19
?
慕运维8079593

TA贡献1876条经验 获得超5个赞

怀疑题主只是忘记定义静态变量了,静态变量在类中是声明,如果只声明未定义但不调用是不会有问题的,但如果未定义还使用了这个变量,就会编译错误了。
#include
#include
usingnamespacestd;
classzz{
public:
staticintb;//声明静态变量
};
intzz::b;//定义静态变量
intmain()
{
cin>>(zz::b);//正常使用
cout<<(zz::b);
return0;
}
                            
查看完整回答
反对 回复 2019-04-19
  • 2 回答
  • 0 关注
  • 760 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信