2013-04-24 70 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

相關問題