神秘的 "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
)
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
)