【问题标题】:Regrading STL Map checking for entry using find使用 find 重新分级 STL Map 检查条目
【发布时间】:2010-11-03 15:21:40
【问题描述】:

我在关注节目

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));
}

我在编译时遇到与 == check in if 条件相关的错误。

'iter == 中的 'operator==' 不匹配 ((CRTSLogManagerReal*)this)->CRTSLogManagerReal::m_mapFileNameToLogStorage.std::map, 标准::分配器 >, CRTSLogManager*, 标准::少, 标准::分配器 > >, 标准::分配器, 标准::分配器 >, CRTSLogManager*> >::.std::_Tree<_traits>::end 与 _Traits = std::_Tmap_traits, 标准::分配器 >, CRTSLogManager*, 标准::少, 标准::分配器 > >, 标准::分配器, 标准::分配器 >, CRTSLogManager*> >, false>'

【问题讨论】:

  • 您可能希望使用“代码示例”选项更好地格式化它。
  • 还有一些语法错误,例如typedef 缺少 map 的模板参数,这使得这段代码很难在我的机器上试用。

标签: c++ stl


【解决方案1】:

你正在为一个

声明一个迭代器
std::map <string, void *>

但您正在尝试与迭代器进行比较

std::map< std::string, CRTSLogManager*>

它们不兼容。

【讨论】:

  • 很好发现,我认为这只是缺少 std::out 的疏忽!
  • 问题不是字符串上的 std::,而是 void 与 CRTSLogManager 的类型不同
【解决方案2】:

不应该声明为

FileNameToStorageClass::iterator iter;

?

【讨论】:

    【解决方案3】:

    std::map&lt;std::string, CRTSLogManager*&gt;map&lt;string, void*&gt; 是不同的类型并且没有相同的迭代器类型,因此您无法比较这些迭代器的两个实例。如果要使用 typedef,则应始终如一地使用它们:

    FileNameToStorageClass::iterator iter;
    

    【讨论】:

      【解决方案4】:

      也许您缺少模板化类(如 std::map)的类型名参数?

      您的键/值对的类或数据类型是什么? 似乎您希望 std::string 作为键和指向 CRTSLogManager 对象的指针作为值。

      在这种情况下,您的 typedef 别名 FileNameToStorageClass 应该是:

      typedef std::map<std::string, CRTSLogManager*> FileNameToStorageClass;
      

      但是,您发布的代码似乎根本不是一个工作程序。 例如这一行:

      string strFilename = "MyFile"
      

      除非您定义了自己的类“字符串”或加载了 std 命名空间,否则它将不起作用。我假设您使用的是 std::string。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-31
        • 1970-01-01
        • 2013-10-06
        • 2016-08-25
        相关资源
        最近更新 更多