我有一个私有成员是静态地图的类:
Class Devices
{
...
private:
struct DevicePair
{
int nCtr;
bool isToAdd;
};
DevicePair m_DevPair;
static map <string, DevicePair> m_SYSdeviceMap;
};
为什么我不能在cpp文件中执行此操作?
map <string, DevicePair> Devices::m_SYSdeviceMap;
如何在cpp文件中初始化它?
答案 0 :(得分:3)
这一行:
map<string, Devices::DevicePair> Devices::m_SYSdeviceMap;
此外,作为良好的编码习惯,请从标题中删除using namespace std;
,并限定您对地图的使用 - std::map
。
答案 1 :(得分:2)
您不能使用您所说的声明,因为它不知道该范围内的DevicePair
是什么,您必须在Devices::
之前
原因是它是您向班级所有用户公开的实施细节。
在你的情况下很难做到,DevicePair
在你的班级是私人的,你不能简单地移动它,因为在m_DevPair的标题中需要它。
当然,如果您需要您的类是线程安全的,您需要一个互斥锁等来控制对映射的访问(除非它在一个线程中初始化然后只由多个线程读取)。互斥体当然会在你的匿名命名空间中(几乎可以肯定)。
我仍然会重新考虑你的设计。