嗨我有一个代码,其结构如下所述。这不是实际的代码,但我试图模拟问题并且它给出了同样的错误。
我有一个名为classTest.cpp的文件,其中包含:
#include<iostream>
#include "header.h"
using namespace std;
int main()
{
test f;
f.insert(10);
cout<<f.search(10)<<endl;
return 0;
}
header.h包含以下代码:
#include<unordered_set>
class test
{
public:
int apple;
unordered_set<int> set;
bool search(int a);
void insert(int a);
};
bool test::search(int a)
{
if(apple!=a)
return false;
return true;
/*
if(set.find(a) == set.end())
return false;
return true;*/
}
void test::insert(int a)
{
apple = a;
//set.insert(a);
}
当我编译classTest.cpp时,我收到以下错误:
header.h:6:2: error: ‘unordered_set’ does not name a type
unordered_set<int> set;
但是当我复制header.h内容并将其粘贴到classTest.cpp中时,它可以正常工作。我无法理解原因。我缺少一些基本概念吗?
答案 0 :(得分:0)
如评论中所述:您试图使用unordered_set
而不限定它来自的命名空间。因此,您的编译器不知道它是什么类型。
当您将test
的声明复制到 classTest.cpp 时,这会有效,因为该文件有using namespace std
。
你应该always qualify your types with their namespace(如果没有其他原因,除了避免这样的问题)。在这种情况下,要解决您的问题,您应该写:
std::unordered_set<int> set;