这真是微不足道,但我收到了一个我没想到的错误。
我有一些代码在命名空间
中以下是一些代表我的代码结构的伪代码:
namespace A {
void init() {
initialize_kitchen_sink();
}
#include "operations.h" // declares shake_and_bake()
void foo() {
shake_and_bake();
}
void cleanup() {
// do nothin' cuz i'm a slob
}
}
错误:
undefined reference to `A::shake_and_bake`
答案 0 :(得分:7)
结果移动命名空间外的#include
将修复它。
实际上,include将实际声明operations.h
命名空间内A
中的所有函数。然后它会徒劳地搜索实现。
我想而不是删除我的整个帖子,我也可以将其留给那些可能偶然发现类似问题并开悟的可能性。
答案 1 :(得分:6)
要准确回答您的问题,您可以使用::作为第一个语句来引用全局命名空间中的内容,如下所示:
void foo() {
::shake_and_bake();
}
当然,对于这种特殊情况,你的答案是正确的。