所以我想如下声明一个地图:我不能在我的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