【发布时间】:2011-06-30 17:33:35
【问题描述】:
NB这不是关于如何使用内联函数或它们如何工作的问题,而是关于它们为什么以它们的方式完成的问题。
类成员函数的声明不需要将函数定义为inline,它只是函数的实际实现。例如在头文件中:
struct foo{
void bar(); // no need to define this as inline
}
那么为什么类函数的内联实现必须在头文件中呢?为什么我不能将内联函数放在.cpp 文件中?如果我尝试将内联定义放在 .cpp 文件中,我会收到如下错误:
error LNK2019: unresolved external symbol
"public: void __thiscall foo::bar(void)"
(?bar@foo@@QAEXXZ) referenced in function _main
1>C:\Users\Me\Documents\Visual Studio 2012\Projects\inline\Debug\inline.exe
: fatal error LNK1120: 1 unresolved externals
【问题讨论】:
-
@Charles 我会说第二个链接很相似,但我想更多地了解为什么内联工作方式背后的逻辑。
-
在那种情况下,我想你可能误解了“内联”或“头文件”;你的两个断言都不正确。您可以拥有成员函数的内联实现,并且可以将内联函数定义放在头文件中,但这可能不是一个好主意。你能澄清你的问题吗?
-
编辑后,我想您可能会问
inline出现在定义上而不是事先声明与反之亦然的情况。如果是这样,这可能会有所帮助:stackoverflow.com/questions/4924912/…
标签: c++ inline theory language-design c++-faq