其他分享
首页 > 其他分享> > c – 声明为private时的静态成员变量

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