由于一些静态数据,我有一个功能
void foo(MyNamespace::bar)
在某个编译单元中定义。但是它的使用点在另一个编译单元中。所以我用

namespace MyNamespace
{
    extern void foo(bar);
}

但是链接器找不到函数定义。我在滥用extern吗?

最佳答案

extern可以用于这种事情。

您的问题是,由于您的MyNamespace::foo(bar);语句在extern内,因此链接器期望使用MyNamespace函数。

您有两种选择:

  • 在您的“使用点”使用extern void foo(MyNamespace::bar);。不要将该行放在MyNamespace中。
  • 或者,将函数定义包含在MyNamespace中。
  • 关于c++ - 使用extern引用在另一个编译单元中定义的函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27169379/

    10-13 09:41