神秘的 "multiple definition" 错误

Mysterious "multiple definition" error

https://gist.github.com/protectivetoast83/25301772cbc6f13e6e07

我搬家了

#include "time.h"

objColPhys.cpp的第2行(继承自objects.h)到[的第3行=26=]objects.h

time.h 未包含在项目的其他任何地方,但现在我在 [=41 的第 9 行收到多重定义错误=]

In function `Z7runTimev':
multiple definition of `runTime()'
first defined here

此外,我不知道 Z7runTimev 是关于什么的,因为该函数被声明为 runTime()

这是怎么回事,我该如何解决?

您错过了包含文件中的所有包含守卫(如评论中所述,为了清楚起见,我将在此处公开)。

当您在多个文件中包含同一个头文件时,预处理器只是将 #include 指令替换为包含文件中的所有代码。因此,嵌套包含可能会导致多次重定义。

只需将以下代码添加到包含文件即可解决此问题:

#ifndef _TIME_H
#define _TIME_H

// Header file code here

#endif

这保证文件只被包含一次(其余时间预处理器跳过头文件代码,因为 #ifndef 指令)。为了安全起见,您需要将包含防护添加到所有包含文件中,当然还有相应的命名。

现在许多编译器都支持你需要在文件开头添加的指令 #pragma once ,并且避免了在文件开头有难看的 #ifdef 的麻烦(和当然最后那个寂寞#endif)