C ++内联函数的定义必须在同一个文件中吗?

时间:2012-02-18 03:07:27

标签: c++ function compiler-construction inline

我将一个函数show()定义为一个名为ex.h的头文件中的内联函数以及ex.cpp内函数的定义。我希望这会给我一个错误,因为编译器不知道调用show()函数的地方要替换什么。但是因为我使用的是IDE,它运行正常。怎么会发生这种情况?

当我尝试手动编译它时,它给了我一个错误,show()被使用但未定义。

3 个答案:

答案 0 :(得分:26)

必须将函数的定义({...}之间的部分)放在头文件中,除非该函数仅在单个.cpp文件中使用。
特别是,如果将内联函数的定义放入.cpp文件中并从其他.cpp文件中调用它,则会从链接器中收到"unresolved external"错误。

[read more]

答案 1 :(得分:6)

我们通常将内联函数放在头文件中,因此编译器可以在编译使用该函数的代码时看到该定义。这样它适用于所有编译器。

某些编译器具有一次优化整个程序的功能(Whole program optimizationLink time optimization)。这些编译器可以内联函数,即使它是在不同的.cpp文件中定义的。

答案 2 :(得分:4)

通常,整个内联函数都存在于.h中 原因是编译器必须预先看到整个内联定义。内联函数通过直接“粘贴”发出的机器语言来编译。