从全局命名空间引用某些东西?

时间:2011-06-29 00:10:30

标签: c++ namespaces

这真是微不足道,但我收到了一个我没想到的错误。

我有一些代码在命名空间

以下是一些代表我的代码结构的伪代码:

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`

2 个答案:

答案 0 :(得分:7)

结果移动命名空间外的#include将修复它。

实际上,include将实际声明operations.h命名空间内A中的所有函数。然后它会徒劳地搜索实现。

我想而不是删除我的整个帖子,我也可以将其留给那些可能偶然发现类似问题并开悟的可能性。

答案 1 :(得分:6)

要准确回答您的问题,您可以使用::作为第一个语句来引用全局命名空间中的内容,如下所示:

 void foo() {            
        ::shake_and_bake();
    }

当然,对于这种特殊情况,你的答案是正确的。