C++ “神秘的”;“多重定义”;错误

C++ “神秘的”;“多重定义”;错误,c++,sdl,sdl-2,C++,Sdl,Sdl 2,我搬家了 #include "time.h" 从objColPhys.cpp的第2行(从objects.h继承)到objects.h的第3行 项目中的其他任何地方都不包括time.h,但是现在我在time.h的第9行中得到了一个多定义错误 另外,我不知道Z7runTimev是关于什么的,因为函数被声明为runTime() 发生了什么以及如何修复它?您错过了包含文件中的所有包含保护(如评论中所述,为了清晰起见,我将在此处公开) 当您在多个文件中包含相同的头文件时,预处理器只是将#include指

我搬家了

#include "time.h"
从objColPhys.cpp的第2行(从objects.h继承)到objects.h的第3行

项目中的其他任何地方都不包括time.h,但是现在我在time.h的第9行中得到了一个多定义错误

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


发生了什么以及如何修复它?

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

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

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

#ifndef _TIME_H
#define _TIME_H

// Header file code here

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


现在许多编译器都支持指令
#pragma once
,您需要在文件开头添加该指令,并且避免了在文件开头使用丑陋的
#ifdef
的麻烦(当然,在文件结尾使用孤独的
#endif

,非常感谢!我将把这些添加到我的文件中。因为time.h文件只包含一次,所以我对为什么一开始就出现这个错误感到有点困惑。编辑:我尝试了按时包含这两个保护。h和我仍然在同一行上得到完全相同的错误。您需要将其添加到每个头文件中,也添加到对象中。h:
#ifndef_objects_h
我将头保护添加到项目中的每个头,并且对于及时声明的所有内容,我仍然得到多个定义错误。h(并且只有在时间上)。为了以防万一,我尝试更改该文件中项的名称,但仍然在所有项上出现多个定义错误。我有点明白了。看起来头保护不喜欢定义,或者显然不喜欢变量声明。我从time.h中删除了这些项,并创建了time.cpp以将它们放入并编译所有内容。
#ifndef _TIME_H
#define _TIME_H

// Header file code here

#endif