我有一个名称空间:
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
有什么不对?
答案 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中