Initializing a private static member variable in the cpp file. error: member is private
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 的地方,因为您忘记了 GetNextID
.[=12 的定义头中的 IDGenerator::
=]
s_nNextID 是私有的,因此您不能像这样访问它。您需要使 GetNextID 成为 class IDGenerator 的成员。
这是一个简单的例子来说明我的问题。
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 的地方,因为您忘记了 GetNextID
.[=12 的定义头中的 IDGenerator::
=]
s_nNextID 是私有的,因此您不能像这样访问它。您需要使 GetNextID 成为 class IDGenerator 的成员。