我有三个文件:
1. Joy.h
class Joy
{
public:
void test();
};
2. Joy.cpp
#include "Joy.h"
inline void Joy::test() {}
3. main.cpp
#include "Joy.h"
int main()
{
Joy r;
r.test();
return 0;
}
我尝试使用以下命令进行编译:
g++ cpp Joy.cpp
g++说:
main.cpp:(.text+0x10): undefined reference to `Joy::test()'
谁能告诉我为什么...
如果我不想在.h文件中定义
test()
函数,但仍希望它是inline
函数,如何解决此问题? 最佳答案
定义内联成员函数时,应在成员函数的定义前加上关键字inline,然后将定义放入头文件中。
基本上内联声明函数时,您是在告诉编译器(如果可能的话),将调用该函数的代码替换为该函数的内容,无论该函数在哪里被调用。这个想法是,函数主体可能很小,并且调用函数比函数本身的开销更大。
为此,编译器需要在编译调用该函数的代码时查看定义,这实际上意味着该定义必须位于 header 中,因为调用该函数的代码只能访问 header 文件。
读得好:
[9.7] How do you tell the compiler to make a member function inline?