【问题标题】:c++: compilation error using map in c++ STL? [closed]c ++:在c ++ STL中使用map编译错误? [关闭]
【发布时间】:2014-02-12 17:19:03
【问题描述】:

我有以下代码:

std::map<char,int> first;

first['a']=10;
first['b']=30;
first['c']=50;
first['d']=70;

int main ()
{
    // ...
    return 0;
}

我有几个编译错误:

first['a']=10;
first['b']=30;
first['c']=50;
first['d']=70;

说:

错误:'first' 没有命名类型

我该怎么做才能编译(当然可以)?

【问题讨论】:

  • 这是一段代码,不是问题。
  • 你能具体说明你的错误是什么吗?此外,您不应该在全局范围内分配给地图 - 这是在您未显示的函数中吗?
  • 你不会像这样填充全局std::map&lt;&gt;
  • 全局范围内的指令存在问题,同时编辑您的问题以使其成为问题。

标签: c++ map stl


【解决方案1】:

你应该搬家:

first['a']=10;
first['b']=30;
first['c']=50;
first['d']=70;

main 函数体内。或者,您可以使用任何其他函数体。作为you can see,这将导致编译成功。

或者,您可以使用 initializer-list(自 C++11 起)初始化 std::map,例如:

std::map<char,int> first {
    {'a', 10},
    {'b', 30},
    {'c', 50},
    {'d', 70}
};       

按照标准,全局命名空间定义为(第 3.3.6/3 节):

翻译单元的最外层声明区域也是 命名空间,称为全局命名空间。

在 §7.3/1 中,命名空间定义为:

命名空间是一个可选命名的声明区域。

【讨论】:

  • 解释为什么你不能在命名空间范围内这样做可能对 OP 有用。
  • 或者,在 C++11 中,给地图一个初始化器,map&lt;...&gt; first {{'a',10},...};
  • @MikeSeymour,已添加,谢谢。
  • @thokra,给我 5 分钟。 :)
  • @Jefffrey:NP,我也必须查看标准。 ;)
【解决方案2】:

你需要放

first['a']=10;
first['b']=30;
first['c']=50;
first['d']=70;

进入main() 范围。

【讨论】:

    【解决方案3】:

    不是一个好问题,但在这里:

    #include <map>
    #include <iostream>
    
    // constructing maps
    std::map<char,int> first;
    
    int main ()
    {
        // populate map
        first['a']=10;
        first['b']=30;
        first['c']=50;
        first['d']=70;
    
        std::map<char,int> second (first.begin(),first.end());
    
        std::map<char,int> third (second);
    
        std::map<char,int>::iterator i;
        char c;
        for(i=first.begin(),c='a';i!=first.end();i++,c++)
            std::cout<<first[c]<<std::endl;
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-21
      相关资源
      最近更新 更多