【发布时间】:2014-10-12 00:29:52
【问题描述】:
如果有人问过这个问题,我深表歉意,我不确定如何用最好的词来表达,也找不到。
我基本上有一个类,我想维护一个自身的映射,并且该列表应该具有该对象的唯一实例。
using std::unordered_map;
class MyClass
{
~MyClass() {};
MyClass() {}; // these actually contain code which operate on the classes data
static unordered_map<Uint32, MyClass> list;
public:
static const MyClass& GetObject(Uint32 key) {return list[key];};
};
当我编译我的代码时,它基本上给了我一堆来自 STL 的错误,说它正在调用已删除的函数等,这是有道理的,因为 unordered_map 可能使用构造函数和析构函数,所以我将 unordered_map 声明为朋友
friend class unordered_map<Uint32, MyClass>;
但是似乎没有更少的错误,我推测这是由于 unordered_map 使用的类,如pair和hash。所以我的问题是是否有替代方案。我应该只声明更多似乎在编译器中出错的朋友,还是有其他方法?
【问题讨论】:
-
"使用 std::unordered_map"
-
哦,打错字了,抱歉,你的意思是朋友。
-
你在哪里初始化你的静态成员变量?
-
程序另一部分的翻译单元,但是这将是一个链接错误,这是一个编译错误。
标签: c++ static friend access-control private-constructor