我有一個static std::map<std::string, CreateGUIFunc>
在基本上持有字符串標識gui類型的類,CreateGUIFunc是對工廠函數的引用。std ::只讀位置的地圖分配
在我的構造函數中我有
if (m_factoryRef.size() == 0) {
m_factoryRef["image"] = &CreateGUI<Image>;
m_factoryRef["button"] = &CreateGUI<Button>;
}
...
然而,這給了我一個錯誤說assignment of read-only location ‘GUIManager::m_factoryRef.std::map<_Key, _Tp, _Compare, _Alloc>::operator[] [with _Key = std::basic_string<char, std::char_traits<char>, std::allocator<char> >, _Tp = GUI*(), _Compare = std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, _Alloc = std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, GUI*()> >](((const std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)(& std::basic_string<char, std::char_traits<char>, std::allocator<char> >(((const char*)"image"), ((const std::allocator<char>&)((const std::allocator<char>*)(& std::allocator<char>())))))))’|
我不知道爲什麼這是一個只讀的分配。我也嘗試將其更改爲普通成員,以查看是否它可能是靜態的,但同樣的事情。
什麼問題?
編輯:一些定義,以使事情多一點明確
// these are all private
typedef GUI* CreateGUIFunc();
template<class T>
GUI* GUIManager::CreateGUI(std::string &filepath, int x, int y) {
return new T(filepath, x, y);
}
static std::map<std::string, CreateGUIFunc> m_factoryRef;
附:如果有更清晰的方式來初始化靜態地圖請讓我知道。
你可以修改地圖的定義,並添加CreateGUIFunc和CreateGUI的定義(不是完整的類,只是爲了讓我們看看它是什麼),甚至更好的可能是最小的selfcontained程序的整個代碼重現問題。 – nus 2010-06-26 00:10:59
據我可以告訴你有模板和參考有點混在這裏。 '&'前綴不是引用,但是如果我沒有錯誤,則「操作符的地址」和「CreateGUI」不是對象的有效名稱。 –
nus
2010-06-26 00:26:40
如何聲明'm_factoryRef'? – 2010-06-26 00:27:26