【问题标题】:map declaration not compiling [duplicate]地图声明未编译[重复]
【发布时间】:2018-02-20 14:02:20
【问题描述】:

因此,由于某种原因,这在类构造器中有效,但在类之外不起作用,我想知道为什么以及如何让我的地图在类之外工作。

#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 

我正在寻找一个这样的例子,如果你能告诉我为什么这不起作用。

【问题讨论】:

  • 你认为type_id["Moon"] = 1;(和其他两个)应该在什么时候执行? (语言规范不允许在函数之外这样做)
  • 在一个更大的程序中我正在尝试创建我希望将我的地图放入标题中,以便我可以在程序的其他部分使用它

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


【解决方案1】:

你的 main 应该是这样的:

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;
}

【讨论】:

  • 或者 OP 可能希望使用 std::map 的列表初始化构造函数? (例如:idMap type_id { {"Moon", 1} };
  • 感谢我一生都在努力的答案
  • 所以这不是重复的,谁曾经标记过它我知道它必须被初始化我会发现那个问题。
猜你喜欢
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多