如何确保 C++ 函数在定义之前被声明(如 override 关键字)?

How to ensure a C++ function is declared before being defined (like the override keyword)?

在我的共享库中,我在头文件中声明了一个函数,并在 .cpp 源文件中定义了它。当 link 使用该库运行应用程序时,link 用户抱怨该函数未定义,我不知道是因为缺少命名空间、不同的参数还是其他原因。

如果我可以将函数定义标记为“实现先前的声明”,我会在编译期间捕捉到这个 declaration/definition 差异,而不是稍后我 link 带有库的应用程序时。

是否有类似于 class 方法的“override”关键字的东西会阻止我在没有现有匹配声明的情况下定义函数?

我可以使用 -Wl,--no-undefined 但有些库是在预期 --no-undefined 不会被使用的情况下创建的。

在命名空间的头文件中声明一个函数,例如:

namespace N { void f(); }

使用 qualified function name:

.cc 文件中定义 函数
void N::f() { /*...*/ }

这样,如果命名空间 N 中的 f 声明与定义不匹配,则会发出编译器错误。

对于某些编译器,Maxim Egorushkin 的另一个答案可以简化如下:

在头文件中正常声明函数:

void f();

使用未命名命名空间的限定名称定义函数:

void ::f() { /* ... */ }

显然你也可以将它放在一个命名空间中。