神秘的“多重定义”错误

时间:2015-05-19 06:37:02

标签: c++ sdl sdl-2

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

我搬了

#include "time.h"

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

time.h 未包含在项目的任何其他位置,但现在我在 time.h

的第9行收到多重定义错误
In function `Z7runTimev':
multiple definition of `runTime()'
first defined here

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

发生了什么,我该如何解决?

1 个答案:

答案 0 :(得分:0)

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

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

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

#ifndef _TIME_H
#define _TIME_H

// Header file code here

#endif

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

现在很多编译器都支持你需要在文件开头添加的指令#pragma once,并避免在文件开头有丑陋#ifdef的麻烦(当然,最后那个孤独​​的#endif