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()
发生了什么,我该如何解决?
答案 0 :(得分:0)
你错过了包含文件中的所有包含警戒(如评论中所述,为了清楚起见,我将在此处公开)。
当您在多个文件中包含相同的头文件时,预处理器只是将#include
指令替换为所包含文件中的所有代码。因此,嵌套包含可能会导致多次重新定义。
只需将以下代码添加到包含文件即可解决此问题:
#ifndef _TIME_H
#define _TIME_H
// Header file code here
#endif
这保证了文件只包含一次(由于#ifndef
指令,预处理器跳过头文件代码的其余时间)。为了安全起见,您需要将包含保护添加到所有包含文件中,当然还需要相应的命名。
现在很多编译器都支持你需要在文件开头添加的指令#pragma once
,并避免在文件开头有丑陋#ifdef
的麻烦(当然,最后那个孤独的#endif