首页 > 解决方案 > 如何确保在定义之前声明 C++ 函数(如 override 关键字)?

问题描述

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

如果我可以将函数定义标记为“实现先前的声明”,我将在编译期间捕获此声明/定义差异,而不是稍后在我将应用程序与库链接时。

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

我可以使用-Wl,--no-undefined,但是创建了一些库,期望--no-undefined不会被使用。

标签: c++shared-libraries

解决方案


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

namespace N { void f(); }

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

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

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


推荐阅读