多文件时inline函数的定义只能放在头文件中
有两个文件year.cpp test_year.cpp ,头文件year.h 。year.h里面函数声明是不带inline的,year.cpp里面函数定义都带了inline,test_year.cpp里面调用了很多year.cpp的函数。编译的时候一条一条报错,都是undefined reference to xxx。
在老师的帮助下发现了问题。结论是多文件时inline函数定义只能放在头文件中,如果定义放在源文件中,无论是在头文件还是在源文件,有一个加了inline,那么其他源文件就用不了该函数。
发现过程如下:
在终端分条输入如下指令
g++ year.cpp -c -o year.o
nm year.o
第一条生成可执行文件year.o
第二条查找该文件里面的名字 发现定义的inline函数的名字都不在可执行文件里。而如果要链接,这些名字是必须的。
所以问题出在inline上,并且尝试了一下,year.cpp和year.h里面只要有一个加了inline,可执行文件里就不会产生对应名字。
此外还可以输入指令
make | findstr 函数名
来找对应的函数名字存不存在。
mark一下。老师真的强,shell小白的我只能佩服。