我在做C++后,随着时间的推移,我已经在类中声明了一个静态变量作为私有,据我所知静态变量是独立于对象,并跨对象共享。如果我尝试使用类名打印类之外的静态变量我得到编译错误是因为该变量是私人的?我的确读过,静态变量只能通过类名和范围解析运算符来访问。在类之外访问私有静态变量
#include <iostream>
using namespace std;
class Sample{
int val;
static int value;
public:
Sample(int in);
Sample();
void setval(int in){
val = in;
}
void printval()const{
cout << val<<endl;
}
};
Sample::Sample(int in){
val = in;
}
Sample::Sample(){
val = 0;
}
int Sample::value = 34;
int main()
{
const Sample obj(1);
Sample obj2;
obj2.printval();
obj.printval();
cout <<"static value = " << Sample::value;
return 0;
}
错误
main.cpp:37:5: error: 'int Sample::value' is private
int Sample::value = 34;
^
main.cpp:49:39: error: within this context
cout <<"static value = " << Sample::value;
'是这是因为变量是私人的'是的,并且错误消息告诉你到底是什么。变量是静态的事实并不改变它仍然是私有的事实。 – SingerOfTheFall
如果你不希望变量为'private',为什么你将它声明为'private'? –
这是私人的手段 - 它不允许在课堂以外使用。 参见:http://stackoverflow.com/questions/860339/difference-between-private-public-and-protected-inheritance – woockashek