地图声明没有编译

时间:2017-09-12 07:48:02

标签: c++ dictionary compiler-errors stl stdmap

因此,由于某种原因,这适用于类的构造函数,但不在类的外部,我想知道为什么以及如何让我的地图在课外工作。

#include <iostream>
#include <string>
#include <map>


typedef std::map <std::string, int> idMap;

idMap type_id;


type_id["Moon"] = 1;
type_id["Star"] = 2;
type_id["Sun"] = 3;


int main()
{

    std::cout << type_id["Moon"] << std::endl;

}

我得到的编译器错误如下

11:1: error: 'type_id' does not name a type 12:1: error: 'type_id' does not name a type 13:1: error: 'type_id' does not name a type 

我正在寻找这样一个可行的例子,如果你能告诉我为什么这不会奏效。

1 个答案:

答案 0 :(得分:4)

你的主要应该是这样的:

int main()
{
   type_id["Moon"] = 1;
   type_id["Star"] = 2;
   type_id["Sun"] = 3;
   std::cout << type_id["Moon"] << std::endl;
}

您不能将这些语句放在函数之外(在这种情况下为main())。

或者,如果您真的想在main()之外填充地图,可以使用列表初始化构造函数,如下所示:

idMap type_id { {"Moon", 1}, {"Star", 2}, {"Sun", 3} };

此方法也适用于头文件,如下所示:

myHeader.h

#include <string>
#include <map>

typedef std::map <std::string, int> idMap;

idMap type_id { {"Moon", 1}, {"Star", 2}, {"Sun", 3} };

的main.cpp

#include <iostream>
#include "myHeader.h"

int main() {
    std::cout << type_id["Moon"] << std::endl;
}