簡體   English   中英

在cpp文件中初始化私有靜態成員變量。 錯誤:成員是私人的

[英]Initializing a private static member variable in the cpp file. error: member is private

這是一個簡單的例子來說明我的問題。

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

s_nNextID是私有的,所以你不能像這樣訪問它。 您需要使GetNextID成為IDGenerator類的成員。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM