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

IDGenerator.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

IDGenerator.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,因为您忘记了IDGenerator::的定义头中的GetNextID

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

10-11 02:44