因此,无论我做什么,我似乎都无法避免由于我在同一项目中的多个源代码文件中包含相同的头文件而使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++的新手,并在标题中提出了问题.或者更确切地说:如果Ah包括Bh和Bh包含Ah,我会得到一条错误消息,因为"include#file"C:... \啊"包括它自己".档案:Bh
我找不到解决这个问题的方法,而我的一般设置几乎要求这些类之间的关系.是否有可能使这项工作?
我正在学习C++,我对内联行为感到困惑.在cppreference上,我发现"包含在多个源文件中的函数必须是内联的".他们的例子如下:
// header file
#ifndef EXAMPLE_H
#define EXAMPLE_H
// function included in multiple source files must be inline
inline int sum(int a, int b)
{
return a + b;
}
#endif
// source file #2
#include "example.h"
int a()
{
return sum(1, 2);
}
// source file #1
#include "example.h"
int b()
{
return sum(3, 4);
}
Run Code Online (Sandbox Code Playgroud)
这对我来说有点混乱 - 我认为ifndef后卫完全正在做这项工作,即在多次包含同一文件时防止出现问题.无论如何,我想测试一下,所以我准备了以下内容:
// Sum.h
#ifndef SUM_H
#define SUM_H
int sum(int a, int b);
#endif
// Sum.cpp
int sum(int a, int …Run Code Online (Sandbox Code Playgroud) 我花了两天时间研究,以避免一些数组的多重定义,我发现#ifdef并bla bla.所以我尝试使用它来测试我的程序,#ifdef它没有做任何事情,调试器仍然说有多个定义.我的程序就是这样的.

当然有多个定义,但我需要像我在图片中向您展示的那样...我认为这是编译器问题或与编译器有关的事情.
PD:我想你不需要任何代码来解决我的问题,如果你需要我会分享.
GameObject.h:
#ifndef GameObject_H
#define GameObject_H
#pragma once
float cube[] =
{
-1.0f,-1.0f,-1.0f,
-1.0f,-1.0f, 1.0f,
-1.0f, 1.0f, 1.0f,
1.0f, 1.0f,-1.0f,
-1.0f,-1.0f,-1.0f,
-1.0f, 1.0f,-1.0f,
1.0f,-1.0f, 1.0f,
-1.0f,-1.0f,-1.0f,
1.0f,-1.0f,-1.0f,
1.0f, 1.0f,-1.0f,
1.0f,-1.0f,-1.0f,
-1.0f,-1.0f,-1.0f,
-1.0f,-1.0f,-1.0f,
-1.0f, 1.0f, 1.0f,
-1.0f, 1.0f,-1.0f,
1.0f,-1.0f, 1.0f,
-1.0f,-1.0f, 1.0f,
-1.0f,-1.0f,-1.0f,
-1.0f, 1.0f, 1.0f,
-1.0f,-1.0f, 1.0f,
1.0f,-1.0f, 1.0f,
1.0f, 1.0f, 1.0f,
1.0f,-1.0f,-1.0f,
1.0f, 1.0f,-1.0f,
1.0f,-1.0f,-1.0f,
1.0f, 1.0f, 1.0f,
1.0f,-1.0f, 1.0f,
1.0f, 1.0f, 1.0f,
1.0f, 1.0f,-1.0f,
-1.0f, 1.0f,-1.0f,
1.0f, 1.0f, 1.0f,
-1.0f, 1.0f,-1.0f, …Run Code Online (Sandbox Code Playgroud) c++ ×4
c ×1
c++-faq ×1
declaration ×1
definition ×1
dev-c++ ×1
header ×1
header-files ×1
include ×1
terminology ×1