今天我在尝试使用 IRremote 库时遇到了一个奇怪的问题,我设法将问题排除如下。如果你在库中有一个文件夹,Foo.h
里面有一个文件夹Foo.cpp
,然后写一个包含 Foo.h的草图:
Foo.h
#ifndef Foo_H
#define Foo_H
int AAA() {
return 0;
}
#endif
Foo.cpp
#include "Foo.h"
草图
#include <Foo.h>
void setup(){
}
void loop(){
}
错误信息是:
Foo\Foo.cpp.o: In function `AAA()':
E:\workShop\Arduino\libraries\Foo\/Foo.h:5: multiple definition of `AAA()'
includeTest.cpp.o:E:\workShop\Arduino\libraries\Foo/Foo.h:5:
first defined here
我使用的是 Windows 7 32 位机器。在 Arduino 1.0.5、1.0.4 和 21、22 上测试。
因此,通过一些研究,我发现问题来自我对预处理器和链接的混淆。这个问题解释了预处理器如何包含文件和包含保护:
这些是帮助我理解链接的一些页面:
这是对内联说明符的更好解释: