【问题标题】:compilation error while compiling C++ code编译 C++ 代码时出现编译错误
【发布时间】:2013-07-28 11:40:15
【问题描述】:

我正在尝试编译 C++ 源文件,但在尝试编译时遇到以下错误。

错误:

错误:“模板类 std::map”在没有模板参数的情况下使用

我在具有mp.find(someString) 的行中得到错误。

map<string, int *> mp;
sub = "xyz";
if(mp.find(sub) != map::end) {  
   doSomething();
}

执行if 语句时出现错误。

我该如何解决这个问题?

【问题讨论】:

标签: c++ c++11 visual-c++ dictionary find


【解决方案1】:

使用mp.end() 代替map::end

更新:

if(mp.find(sub) != map::end) { 

if(mp.find(sub) != mp.end()) {
//                 ^^^^^^^^

std::map::end参考

【讨论】:

  • 本文档cplusplus.com/reference/map/map/find 说“在容器中搜索具有等效于 k 的键的元素,如果找到则返回一个迭代器,否则返回一个迭代器到 map::end。”因此我使用了map::end。那么是否应该更改此文档?
  • 应该解释为If no such element is found, past-the-end (see end()) iterator is returned.
  • @bourne 那里的文档没有任何问题,只是编写 map::end 并期望它将迭代器返回到末尾不是很明智。结束什么?到底什么是“地图”?
【解决方案2】:

你需要使用mp.end:

 if(mp.find(sub) != mp.end() ) {

find 的此参考显示了一个更广泛的示例。

【讨论】:

    【解决方案3】:

    您应该将代码更新为:

    if(mp.find(sub) != mp.end())
    //                 ^^^^^^^^
    

    end() 方法返回一个迭代器,该迭代器引用地图容器中的最后一个元素。

    http://www.cplusplus.com/reference/map/map/end/

    也许您正在尝试使用std::end,他是C++11 功能:

    if(mp.find(sub) != std::end(mp))
    //                 ^^^^^^^^^^^^
    

    在这种情况下,std::end(mp) 的行为与mp.end() 完全相同。

    查看文档:http://www.cplusplus.com/reference/iterator/end/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-22
      相关资源
      最近更新 更多