我有三个文件:

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?

09-30 22:00
查看更多