我将一个函数show()
定义为一个名为ex.h
的头文件中的内联函数以及ex.cpp
内函数的定义。我希望这会给我一个错误,因为编译器不知道调用show()
函数的地方要替换什么。但是因为我使用的是IDE,它运行正常。怎么会发生这种情况?
当我尝试手动编译它时,它给了我一个错误,show()
被使用但未定义。
答案 0 :(得分:26)
必须将函数的定义({...}
之间的部分)放在头文件中,除非该函数仅在单个.cpp
文件中使用。
特别是,如果将内联函数的定义放入.cpp
文件中并从其他.cpp
文件中调用它,则会从链接器中收到"unresolved external"
错误。
答案 1 :(得分:6)
我们通常将内联函数放在头文件中,因此编译器可以在编译使用该函数的代码时看到该定义。这样它适用于所有编译器。
某些编译器具有一次优化整个程序的功能(Whole program optimization或Link time optimization)。这些编译器可以内联函数,即使它是在不同的.cpp文件中定义的。
答案 2 :(得分:4)
通常,整个内联函数都存在于.h中 原因是编译器必须预先看到整个内联定义。内联函数通过直接“粘贴”发出的机器语言来编译。