【问题标题】:Must the definition of a C++ inline functions be in the same file?C++ 内联函数的定义必须在同一个文件中吗?
【发布时间】:2012-02-18 03:07:26
【问题描述】:
我在名为ex.h 的头文件中定义了一个内联函数show(),并在ex.cpp 中定义了该函数。我预计这会给我一个错误,因为编译器将不知道在调用 show() 函数的位置替换什么。但是因为我使用的是 IDE,所以效果很好。怎么会这样?
顺便说一句,当我尝试手动编译它时,它给了我一个错误,即 show() 已使用但未定义。
【问题讨论】:
标签:
c++
function
compiler-construction
inline
【解决方案1】:
必须将函数的定义({...} 之间的部分)放在头文件中,除非该函数仅在单个 .cpp 文件中使用。
特别是,如果您将内联函数的定义放入.cpp 文件并从其他.cpp 文件中调用它,您将收到来自链接器的"unresolved external" 错误。
[read more]
【解决方案3】:
通常整个内联函数都存在于 .h
原因是编译器必须预先查看整个内联定义。内联函数是通过直接“粘贴”发出的机器语言来编译的。