我有一个基本的Core.h文件和许多其他的.cpp和.h文件,比方说 - (a.cpp,a.h,b.cpp,b.h,c.cpp,c.h)
现在,我已将Core.h文件包含在所有.h文件中(即a.h,b.h和c.h)。在c.cpp中,我包含了a.h和b.h文件。结果Core.h文件被包含两次,我收到了类似的错误
/tmp/ccq7z6jY.o: In function `fileID2fileName(int)':
/home/Core.h:20: multiple definition of `fileID2fileName(int)'
/tmp/cciNkoqe.o:/home/Core.h:20: first defined here
/tmp/ccravW4I.o: In function `fileID2fileName(int)':
/home/Core.h:20: multiple definition of `fileID2fileName(int)'
/tmp/cciNkoqe.o:/home/Core.h:20: first defined here
/tmp/ccdUjOEu.o: In function `fileID2fileName(int)':
/home/Core.h:20: multiple definition of `fileID2fileName(int)'
/tmp/cciNkoqe.o:/home/Core.h:20: first defined here
collect2: ld returned 1 exit status
答案 0 :(得分:11)
问题不包括警卫:他们不会帮助不同的翻译单位。
您需要:
inline
static
正如StackedCrooked正确提到的那样,包括静态函数定义但未使用它将导致适当的编译器警告。