我有三个文件:
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++ say:
main.cpp:(.text+0x10): undefined reference to `Joy::test()'
谁能告诉我为什么...
如果我不想定义这个问题如何解决test()
.h 文件中的函数,但仍希望它是inline
功能?
当定义内联成员函数时,应该在成员函数的定义前面加上关键字 inline,并将定义放入头文件中。
当您声明内联函数时,您基本上是在告诉编译器(如果可能)在调用该函数时用该函数的内容替换调用该函数的代码。这个想法是函数体可能很小,并且调用函数比函数体本身的开销更大。
为了能够做到这一点,编译器需要在编译调用函数的代码时查看定义,这本质上意味着定义必须驻留在标头中,因为调用函数的代码只能访问头文件。
好读:
[9.7] 如何告诉编译器将成员函数内联? http://www.parashift.com/c++-faq-lite/inline-functions.html#faq-9.7
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)