![](/img/trans.png)
[英]Why don't methods defined in classes in C++ need forward declarations when referring to methods that only show up later in the class?
[英]c++ functions defined inside class declaration don't show up as linker symbols
这是我的C ++类,部分在类内部定义,而部分在外部定义。 问题是:执行nm揭示类声明中定义的函数未显示在目标文件中,而外部函数显示在目标文件中。 如何使类中的符号也出现在目标文件中? 我正在使用g ++ 4系列。
class A {
public:
void this_will_not_show_up() { };
void this_will_show_up();
};
void A::this_will_show_up() { }
在类定义中内联定义的函数被编译为内联函数,即该函数中的代码被“复制”到调用函数。 因此,您没有内联函数的任何专用实现,并且没有链接器符号。
当在编译单元中定义非内联方法时,可能是从另一个编译单元调用了此函数。 因此,此实现需要可以链接的功能。 编译器仅生成一个函数,该函数包括在链接器映射中找到的标题和(修饰的)名称。
在共享库中使用它时没有问题,因为编译器需要使用的所有内容都在头文件中定义。 像STL这样的库几乎完全只作为标头实现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.