'unordered_set'在头文件

时间:2015-10-21 00:35:56

标签: c++ oop header-files

嗨我有一个代码,其结构如下所述。这不是实际的代码,但我试图模拟问题并且它给出了同样的错误。

我有一个名为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中时,它可以正常工作。我无法理解原因。我缺少一些基本概念吗?

1 个答案:

答案 0 :(得分:0)

如评论中所述:您试图使用unordered_set而不限定它来自的命名空间。因此,您的编译器不知道它是什么类型。

当您将test的声明复制到 classTest.cpp 时,这会有效,因为该文件有using namespace std

你应该always qualify your types with their namespace(如果没有其他原因,除了避免这样的问题)。在这种情况下,要解决您的问题,您应该写:

std::unordered_set<int> set;