所以我想如下聲明一個地圖:我不能在我的cpp文件中聲明一個地圖
map<string, vector<myStruct>> myMap;
在我寫using namespace std
我的文件的頂部,我也有#include <string>
。
但是我得到這些奇怪的錯誤:
錯誤:ISO C++禁止的「地圖」無類型
我不知道如何解決它的聲明。如果我編寫#include <map>
只會導致編譯器出現異常。
所以我想如下聲明一個地圖:我不能在我的cpp文件中聲明一個地圖
map<string, vector<myStruct>> myMap;
在我寫using namespace std
我的文件的頂部,我也有#include <string>
。
但是我得到這些奇怪的錯誤:
錯誤:ISO C++禁止的「地圖」無類型
我不知道如何解決它的聲明。如果我編寫#include <map>
只會導致編譯器出現異常。
您還應該包括<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;
你有#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;
您需要包括map
頭文件。
#include <map>
同時,如果你不使用C++ 11,你需要一個空間:
map<string, vector<myStruct> > myMap;
//^^
注意,缺乏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);
}
@tacp:好的一點,取決於編譯器的>>可能需要>>。這使用gcc 4.7.2乾淨地編譯(並運行)。 – jbphelps 2013-04-24 00:51:11
見然後將其包含在本文檔頂部的「標題中定義」註釋中(http://en.cppreference.com/w/cpp/container/map)。正如在幾個答案中提到的,*不要*在名稱文件中放置'using namespace std;'。這只是一個壞主意。 – WhozCraig 2013-04-24 00:49:44