c ++:在c ++ STL中使用map编译错误? [关闭]

Posted

技术标签:

【中文标题】c ++:在c ++ STL中使用map编译错误? [关闭]【英文标题】:c++: compilation error using map in c++ STL? [closed] 【发布时间】: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; 全局范围内的指令存在问题,同时编辑您的问题以使其成为问题。 【参考方案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;

【讨论】:

以上是关于c ++:在c ++ STL中使用map编译错误? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

c中多维数组的编译器错误

Visual Studio 2013 中可能存在的 C/C++ 编译器错误

在 Cython 中使用 C++ STL 映射

如何在 virtualenv 中使用 MinGW 编译 Python C 扩展?

在 Linux 中编译 C 代码时,Mex 为 // 生成错误

如何使用c#在asp.net网页中显示C程序错误