c – 声明为private时的静态成员变量
作者:互联网
当静态成员变量在类中声明为private时,如何定义它?
假设我有以下类声明
class static_demo
{
private:
static int a;
public:
static int b;
void set(int x, int y)
{
a = x;
b = y;
}
void show()
{
cout << "a = " << a << "\n";
cout << "b = " << b << "\n";
}
};
然后以下语句定义将导致编译错误.
int static_demo::a;
那么有可能在类的私有部分中有一个静态数据成员吗?
根据Greg添加完整代码,
#include <iostream>
using namespace std;
class static_demo
{
private:
static int a;
public:
static int b;
void set(int x, int y)
{
a = x;
b = y;
}
};
int static_demo::a;
int static_demo::b;
int main()
{
static_demo::b = 10;
static_demo::a = 20;
return 0;
}
编译错误是:
static_member_variable.cpp: In function `int main()':
static_member_variable.cpp:20: error: `int static_demo::a' is private
static_member_variable.cpp:26: error: within this context
解决方法:
When a static member variable is declared private in a class, how can it be defined?
与在源(cpp)文件中定义公共静态变量的方式完全相同.
int static_demo::a = 1;
访问说明符在定义成员时不会给您错误.访问说明符控制成员变量的访问,定义静态变量是允许的excpetion.
在Ideone here上干净地编译.
编辑:在您发布代码后回答您的问题.
您的问题不是静态成员的定义.该错误是因为您尝试访问main中的私有静态成员.你不能这样做.
类的私有成员只能在类成员函数内访问,同样的规则甚至适用于静态成员.为了能够修改/访问静态成员,您必须向类中添加成员函数,然后修改/访问其中的静态成员.
标签:c,static-members 来源: https://codeday.me/bug/20191004/1851856.html