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

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

本文关键字:声明 关键字 override 定义 函数 何确保 确保 C++      更新时间:2023-10-16

在我的共享库中,我在头文件中声明了一个函数,并在.cpp源文件中定义了它。当将应用程序与库链接时,链接器会抱怨函数未定义,我不知道是因为缺少名称空间、不同的参数还是其他原因。

如果我可以将函数定义标记为";实现先前声明";,我会在编译过程中发现这种声明/定义的差异,而不是稍后将应用程序与库链接时。

是否存在类似于";覆盖";关键字的类方法,这将阻止我在没有现有匹配声明的情况下定义函数?

我可以使用-Wl,--no-undefined,但创建一些库时希望不会使用--no-undefined

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

namespace N { void f(); }

使用限定的函数名在.cc文件中定义函数:

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

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

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

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

void f();

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

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

显然,您也可以将其放置在名称空间中。