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<>
。
全局范围内的指令存在问题,同时编辑您的问题以使其成为问题。
【参考方案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<...> 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编译错误? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 2013 中可能存在的 C/C++ 编译器错误
如何在 virtualenv 中使用 MinGW 编译 Python C 扩展?