我正在关注程序
typedef std::map<std::string, CRTSLogManager*> FileNameToStorageClass;
FileNameToStorageClass m_mapFileNameToLogStorage;
map<string, void*>::iterator iter;
iter =m_mapFileNameToLogStorage.find(cFileName);
if(iter == m_mapFileNameToLogStorage.end())
{
typedef std::pair<std::string, CRTSLogManager*> FileNameToStorageClassPair;
string strFilename = "MyFile";
CRTSLogManager *pLogManager = new CRTSLogManager();
m_mapFileNameToLogStorage.insert(
FileNameToStorageClassPair(strFilename, pLogManager));
}
我在编译时遇到以下错误,这与==签入条件有关。
'iter ==中的'operator =='不匹配 ((CRTSLogManagerReal *)此) - &GT; CRTSLogManagerReal :: m_mapFileNameToLogStorage.std ::地图, std :: allocator&gt;, CRTSLogManager * 性病::少, std :: allocator&gt; &gt;中 的std ::分配器, std :: allocator&gt;, CRTSLogManager * GT; &GT; ::的std :: _树&LT; _Traits&GT; ::端 与_Traits = 的std :: _ Tmap_traits, std :: allocator&gt;, CRTSLogManager * 性病::少, std :: allocator&gt; &gt;中 的std ::分配器, std :: allocator&gt;, CRTSLogManager * GT; &gt;,false&gt;'
答案 0 :(得分:5)
您正在声明
的迭代器std::map <string, void *>
但您正在尝试与
的迭代器进行比较std::map< std::string, CRTSLogManager*>
它们不兼容。
答案 1 :(得分:4)
不应该宣布为
FileNameToStorageClass::iterator iter;
答案 2 :(得分:2)
std::map<std::string, CRTSLogManager*>
和map<string, void*>
是不同的类型,并且没有相同的迭代器类型,因此您无法比较这些迭代器的两个实例。如果您要使用typedef,则应始终如一地使用它们:
FileNameToStorageClass::iterator iter;
答案 3 :(得分:0)
也许你错过了模板化类的类型名参数,如std :: map?
您的键/值对的类或数据类型是什么? 好像你想要键的std :: string和CRTSLogManager对象的指针作为值。
在这种情况下,你的typedef别名FileNameToStorageClass应该是:
typedef std::map<std::string, CRTSLogManager*> FileNameToStorageClass;
但是,您发布的代码似乎根本不是一个有效的程序。 例如,这一行:
string strFilename = "MyFile"
除非您定义了自己的类“string”或加载了std名称空间,否则将无效。我假设您正在使用std :: string。