我不能宣布一张地图

时间:2013-04-24 00:38:46

标签: c++ compiler-construction map iso

所以在我的cpp文件中,我试图按如下方式声明地图:

map<string, vector<myStruct>> myMap;

在我的文件顶部,我写了using namespace std,我也有#include <string>

但是我遇到了这些奇怪的错误:

错误:ISO C ++禁止声明没有类型的“map”

我不知道如何修复它。如果我写#include <map>只会导致编译器吓坏。

4 个答案:

答案 0 :(得分:4)

你有#include <map>吗?休息看起来有效, 但是,如果您的C ++标准不是C ++ 11,则可能需要添加空格:

#include <map>
#include <vector>
#include <string>
using namespace std;

map<string, vector<myStruct> > myMap;
                           ^^^

更好的是不使用namespace std:

#include <map>
#include <vector>
#include <string>

std::map<std::string, std::vector<myStruct> > myMap;

答案 1 :(得分:0)

您还应该加入<map>std::map是通过此标头引入的。

此外,using namespace std is considered a bad practice。您应该使用using语句或使用名称前缀std::来表示完全限定的标识符:

#include <map>
#include <string>
#include <vector>

std::map<std::string, std::vector<myStruct>> myMap;

答案 2 :(得分:0)

您需要包含map标头文件。

  #include <map>

同时,如果您不使用C ++ 11,则需要一个空格:

 map<string, vector<myStruct> > myMap;
                           //^^

答案 3 :(得分:0)

注意,缺少using语句;)

#include <vector>
#include <string>
#include <map>

#include <iostream>

typedef int myStruct;

std::map<std::string, std::vector<myStruct>> myMap;

int
main()
{
  std::vector<myStruct> testMe = { 1, 2, 3};
  myMap["myTest"] = testMe;
  std::cout << myMap.size() << std::endl;
  return(0);
}