神秘的"multiple definition"错误

Mysterious "multiple definition" error

本文关键字:definition 错误 multiple      更新时间:2023-10-16

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

I moved

#include "time.h"

objcolphyss .cpp的第二行(继承自objects.h)到objects.h

的第三行

time.h不包括在项目的其他任何地方,但现在我在time.h

的第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 s的麻烦(当然,孤独的#endif在末尾)