相关疑难解决方法(0)

重复多重定义错误,在多个cpps中包含相同的标头

因此,无论我做什么,我似乎都无法避免由于我在同一项目中的多个源代码文件中包含相同的头文件而使Dev C++发出大量多重定义错误.我非常希望避免将我的所有源代码转储到一个文件中,并且只包含一次标题,因为这将使我的文件很长并且难以管理.

从本质上讲,这是正在发生的事情:

#ifndef _myheader_h
#define _myheader_h

typedef struct MYSTRUCT{
int blah;
int blah2; } MYSTRUCT;

MYSTRUCT Job_Grunt;
MYSTRUCT *Grunt = &Job_Grunt;
MYSTRUCT Job_Uruk;
MYSTRUCT *Uruk = &Job_Grunt;

int Other_data[100];

void load_jobs();

#endif
Run Code Online (Sandbox Code Playgroud)

示例Cpp文件(它们几乎都看起来像这样):

#include "myheader.h"

void load_jobs(){

Grunt->blah = 1;
Grunt->blah2 = 14;

Uruk->blah = 2;
Uruk->blah2 = 15;

return; }
Run Code Online (Sandbox Code Playgroud)

请记住,我有大约5个包含这个标题的cpp文件,每个文件都处理头文件中找到的不同类型的结构.在这个例子中,当实际头文件中有大约4-6个不同的结构,并且有更多的成员时,只有一个结构包含几个成员.我在其中包含的所有文件都遵循您在此示例中看到的相同公式.

现在我明白了标头防护只能阻止每个单独的cpp文件多次包含头文件.似乎正在发生的事情是,当编译器在每个cpp的开头读取include时,它会再次定义头文件,这会导致它吐出以下行和行:

Multiple Definition of Uruk, first defined here  
Multiple Definition of Job_Uruk, first defined here  
Multiple Definition of Grunt, first defined here  
Multiple Definition of Job_Grunt, first …
Run Code Online (Sandbox Code Playgroud)

c++ multiple-inclusions multiple-definition-error dev-c++

15
推荐指数
4
解决办法
4万
查看次数