使用extern来指代在不同编译单元中定义的函数

P45*_*ent 2 c++ extern

由于一些静态数据,我有一个功能

void foo(MyNamespace::bar)

在某个编译单元中定义.但它的使用点在于另一个编译单元.所以我用

namespace MyNamespace
{
    extern void foo(bar);
}
Run Code Online (Sandbox Code Playgroud)

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

Bat*_*eba 8

extern 可以用于这种事情.

您的问题是链接器MyNamespace::foo(bar);由于您的extern语句在其中而期望函数MyNamespace.

你有两个选择:

  1. extern void foo(MyNamespace::bar);你的"使用点".不要将该行括起来MyNamespace.

  2. 或者,将函数定义包含在其中MyNamespace.