关于inline的一些小坑
之前在编译多文件的时候发现编译器一直报undefined reference to 'XXX'
的错误,后来发现是inline
的问题。
1 | // 原先.h内的部分代码 |
1 | // 原先.cpp内的部分代码 |
把inline
去掉后才能正常编译。
具体原因参考关于 inline 函数的分析:undefined reference to。
- 如果将函数的实现放在头文件中,那么每一个包含该头文件的cpp文件都将得到一份关于该函数的定义,链接器会报函数重定义错误。
- 如果将函数的实现放在头文件中,且标记为
inline
,那么每个包含该头文件的cpp文件都将得到一份关于该函数的定义,链接器不会报错。 - 如果将函数实现放在cpp文件中,并且没有标记为
inline
,那么该函数可以被链接到其他编译单元中。 - 如果将函数实现放在cpp文件中,并且标记
inline
,那么该函数对其他编译单元不可见,也就是其他cpp文件不能链接该函数库。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 sudo_Yiii博客!