名称空间尚未声明

时间:2014-08-21 09:02:44

标签: c++

我有一个名称空间:

HW.h

#include <select.h>
namespace Hw
{
    void setInput(uint8_t type, uint8_t input, ESelect select);
    void setParam(uint8_t param, ESelect select);
}

select.h

enum class ESelect
{
    Select0, 
    Select1, 
    Select2
}

以上两者都在同一个静态库中。我试着从另一个静态库中调用它,就像这样。

Test.cpp的

#include<HW.h>
#include<select.h>
Hw::setInput( 0, 2, ESelect::Select0 );

我收到错误:

error: ‘Hw’ has not been declared
error: ‘ESelect’ has not been declared

有什么不对?

2 个答案:

答案 0 :(得分:4)

使用#include <some_header.h>会导致编译器在任何用户目录之前搜索系统包含目录。许多* nix系统已经有一个名为select.h的系统标题,因此您可能不包含自己的select.h

更改所有出现次数:

#include <select.h>

为:

#include "select.h"

同样为#include <HW.h>

理想情况下,您不应该为自己的标头使用系统标头名称,并且应始终使用""作为用户标头,<>作为系统标头。

为了将来参考,调试此类问题的一种有用技巧是使用g++ -E ...或等效项来查看实际包含的标题。

答案 1 :(得分:3)

看起来你没有

#include "HW.h"

在Test.cpp中