c++ - 如何确保在定义之前声明 C++ 函数(如 override 关键字)?
问题描述
在我的共享库中,我在头文件中声明了一个函数,并在 .cpp 源文件中定义了它。将应用程序与库链接时,链接器抱怨该函数未定义,我不知道是因为缺少命名空间、不同的参数还是其他原因。
如果我可以将函数定义标记为“实现先前的声明”,我将在编译期间捕获此声明/定义差异,而不是稍后在我将应用程序与库链接时。
是否有类似于类方法的“覆盖”关键字的东西会阻止我在没有现有匹配声明的情况下定义函数?
我可以使用-Wl,--no-undefined
,但是创建了一些库,期望--no-undefined
不会被使用。
解决方案
在命名空间的头文件中声明一个函数,例如:
namespace N { void f(); }
.cc
使用限定函数名在文件中定义函数:
void N::f() { /*...*/ }
这样,如果f
命名空间中没有N
与定义匹配的声明,则会发出编译器错误。
推荐阅读
- php - 电话号码正则表达式应以 0 开头
- javascript - 当只有一个参数但有两个变量时,闭包如何工作?
- gitlab - .gitlab-ci.yml 我们可以捕获 curl 的响应然后有选择地运行后续阶段吗?
- javascript - Typescript React 中的动态过滤
- python - 如何在循环的每次迭代中使用 for-loop 为 SVR 生成 X_train?
- python-3.x - 将矩形图像投影到弯曲的背景上
- asp.net-core - 如何使用带有自定义参数的 ASP.NET Core 实现 dhtmlxScheduler?
- rest - VMware Rest API 身份验证失败
- python - 使用嵌套的while循环替换列表列表的元素
- oauth-2.0 - Oauth2 PKCE 谁应该生成代码验证器和代码质询