1

所以在我的 cpp 文件中,我试图声明一个映射如下:

map<string, vector<myStruct>> myMap;

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

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

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

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

4

4 回答 4

4

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

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

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

最好不要使用命名空间标准:

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

std::map<std::string, std::vector<myStruct> > myMap;
于 2013-04-24T00:41:10.827 回答
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);
}
于 2013-04-24T00:49:13.443 回答
0

您还应该包括<map>. std::map通过此标头引入。

此外,using namespace std被认为是一种不好的做法。您应该有一个using声明或使用名称的前缀std::来表示完全限定的标识符:

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

std::map<std::string, std::vector<myStruct>> myMap;
于 2013-04-24T00:40:25.350 回答
0

您需要包含map头文件。

  #include <map>

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

 map<string, vector<myStruct> > myMap;
                           //^^
于 2013-04-24T00:41:37.957 回答