C++ 如何防止.h文件中出现多个函数定义

C++ 如何防止.h文件中出现多个函数定义,c++,C++,我有一个基本的Core.h文件和许多其他的.cpp和.h文件,比如-(a.cpp,a.h,b.cpp,b.h,c.cpp,c.h) 现在,我已经在所有.h文件(即a.h、b.h和c.h)中包含了Core.h文件。在c.cpp中,我包括a.h和b.h文件。结果Core.h文件被包含了两次,我得到了类似的错误 /tmp/ccq7z6jY.o: In function `fileID2fileName(int)': /home/Core.h:20: multiple definition of `fi

我有一个基本的Core.h文件和许多其他的.cpp和.h文件,比如-(a.cpp,a.h,b.cpp,b.h,c.cpp,c.h)

现在,我已经在所有.h文件(即a.h、b.h和c.h)中包含了Core.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

问题不在于包括警卫:他们不会帮助不同的翻译单位

您需要:

  • 在.cpp文件中每次定义一次函数,并且只在.h文件中声明它们
  • 在标题中定义它们
    inline
  • 在标题中定义它们
    static

正如StackedCrooked正确地提到的,包含静态函数定义但不使用它将导致适当的编译器警告。

Include guards不会修复在程序中具有多个定义的头中定义的函数。没有任何东西可以阻止两个单独的TU,包括标题,然后链接。您必须给出函数的内部链接,或者在实现文件中定义它。@chris:这是答案;请做一个!将它们定义为
static
可能会触发“unused function”编译器警告(在未使用的编译单元中)。我不知道这一点。谢谢