2013-04-24 55 views
1

所以我想如下声明一个地图:我不能在我的cpp文件中声明一个地图

map<string, vector<myStruct>> myMap; 

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

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

错误:ISO C++禁止的“地图”无类型

我不知道如何解决它的声明。如果我编写#include <map>只会导致编译器出现异常。

+0

见然后将其包含在本文档顶部的“标题中定义”注释中(http://en.cppreference.com/w/cpp/container/map)。正如在几个答案中提到的,*不要*在名称文件中放置'using namespace std;'。这只是一个坏主意。 – WhozCraig 2013-04-24 00:49:44

回答

4

你有#include <map>?其余的看起来有效, 但是你可能需要添加一个空间,如果你的C++标准是不是C++ 11:

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

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

甚至最好不要使用空间std:

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

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

您需要包括map头文件。

#include <map> 

同时,如果你不使用C++ 11,你需要一个空间:

map<string, vector<myStruct> > myMap; 
          //^^ 
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); 
} 
+0

@tacp:好的一点,取决于编译器的>>可能需要>>。这使用gcc 4.7.2干净地编译(并运行)。 – jbphelps 2013-04-24 00:51:11

相关问题