c++ - 在cpp文件中初始化一个私有(private)静态成员变量。错误 : member is private

标签 c++ static initialization private

这是一个简单的例子来说明我的问题。

ID生成器.hpp

#ifndef IDGENERATOR_HPP_
#define IDGENERATOR_HPP_

class IDGenerator {

   private:
      static int s_nNextID;

      // make the IDGenerator class a static class with a private default constructor
      IDGenerator();

   public:
      static int GetNextID();

};

#endif

ID生成器.cpp

#include "IDGenerator.hpp"

// initialize the static id
int IDGenerator::s_nNextID(1);

int GetNextID()
{
   return IDGenerator::s_nNextID++;
}

我已尝试显式初始化 (int IDGenerator::s_nNextID = 1;) 和隐式初始化,如图所示。 这是编译命令和错误

g++ -c IDGenerator.cpp
IDGenerator.cpp: In function ‘int GetNextID()’:
IDGenerator.cpp:11:5: error: ‘int IDGenerator::s_nNextID’ is private
 int IDGenerator::s_nNextID(1);
     ^
IDGenerator.cpp:15:22: error: within this context
  return IDGenerator::s_nNextID++;

我还尝试使用 -Wall 和 std=gnu++11 进行编译。同样的错误

最佳答案

错误与初始化无关。它只是指向初始化作为 s_nNextID 的来源。

真正的错误出现在第 15 行,您从普通全局函数访问 s_nNextID 的地方,因为您忘记了 GetNextID 定义头中的 IDGenerator::

关于c++ - 在cpp文件中初始化一个私有(private)静态成员变量。错误 : member is private,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29051559/

相关文章:

这会导致段错误消息吗?

c++ - 带有 float 据的 C 数组在 Objective C 类中崩溃 (EXC_BAD_ACCESS)

c++ - 在命名空间中引用是否可行?

c++ - 使用相同的方法将一个变量用于不同的类

java - 为什么 DrJava 返回静态错误?

C++ 静态类成员未在 * 静态库中初始化 *

c++ - 静态与成员变量

c - 初始化变量和声明后立即赋值有区别吗?

c++ - Gtk+ : How to set the cursor of a window from a Cairo context?

java - 字符串因未知原因被初始化为 0