如何确保C++函数在定义之前声明(如override关键字)
How to ensure a C++ function is declared before being defined (like the override keyword)?
在我的共享库中,我在头文件中声明了一个函数,并在.cpp源文件中定义了它。当将应用程序与库链接时,链接器会抱怨函数未定义,我不知道是因为缺少名称空间、不同的参数还是其他原因。
如果我可以将函数定义标记为";实现先前声明";,我会在编译过程中发现这种声明/定义的差异,而不是稍后将应用程序与库链接时。
是否存在类似于";覆盖";关键字的类方法,这将阻止我在没有现有匹配声明的情况下定义函数?
我可以使用-Wl,--no-undefined
,但创建一些库时希望不会使用--no-undefined
。
在命名空间的头文件中声明函数,例如:
namespace N { void f(); }
使用限定的函数名在.cc
文件中定义函数:
void N::f() { /*...*/ }
这样,如果命名空间N
中的f
声明与定义不匹配,则会发出编译器错误。
Maxim Egorushkin的另一个答案对于一些编译器来说可以简化如下:
在头文件中声明函数为正常:
void f();
使用具有未命名名称空间的限定名称定义函数:
void ::f() { /* ... */ }
显然,您也可以将其放置在名称空间中。
相关文章:
- 如何确保C++函数在定义之前声明(如override关键字)
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- 声明C++数组(带或不带 "new" 关键字)
- 使用"class"关键字,后跟未声明的标识符
- 前向声明时"结构"和"类"关键字是否相同?
- 统一初始化是隐式发生的,即使 int 强制转换运算符是使用 explicit 关键字声明的.原因是什么?
- 使用 (c++11) 声明类型时放置 __declspec(dllimport) 关键字的位置
- 书籍示例在类声明中使用"explicit"关键字。无效吗?
- 二元运算符声明的'static'关键字
- 视觉C++:即使使用关键字,参数声明也会隐藏类成员"this"
- 是否可以将“自动”关键字用作函数指针声明中使用初始化的返回类型
- 为什么当我使用"new"关键字声明数组指针时无法删除它
- 为什么我应该使用extern关键字来声明命名空间范围中的变量
- 为什么对isnan的呼吁并不含糊?a.k.a.关键字使用引入两次相似的函数声明
- 使用 C++11 auto 关键字声明两个(或多个)变量
- 如果我在标题文件中使用关键字的声明,则应该在定义本身中包含相同的关键字
- 在 C++ 中使用关键字 using 声明模板化函数指针的语法
- 用关键字声明外部本地变量
- 如何使用自动和声明的关键字来释放模板参数扣除
- c++使用Boost库示例中的声明关键字用法