我正在尝试编写Arduino库。
我已将所有代码放入命名空间中,并遇到了一些链接器错误。
奇怪的是,当我更改命名空间的名称时,这些错误消失了。
我的问题是这可能是什么原因?可能是其他库已经使用了该 namespace 吗?
最小示例:
at24c256.h
#ifndef AT24C256
#define AT24C256
namespace AT24C256 {
int f();
}
#endif
at24c256.cpp
#include "at24c256.h"
namespace AT24C256 {
int f() {return 42;}
}
然后在草图中,我只调用
AT24C256::f()
。#include "at24c256.h"
void setup() {
}
void loop() {
AT24C256::f();
}
所有三个文件都在同一目录中。
我在这种情况下得到的错误是:
如果我将AT24C256更改为其他格式,则构建将完成且没有错误。
更新:
我不小心发布了错误的错误消息。我实际上得到的是:
最佳答案
‘::f’ has not been declared
这表明我们在全局范围内调用了
f()
函数。当您要使用该函数时,您必须在同一范围内或显式指定范围。编辑
编辑后,头文件现在显示问题:
#ifndef AT24C256
#define AT24C256
namespace AT24C256 {
您正在使用匿名 namespace 。
AT24C256::f()
将预处理器保留为::f()