0

我正在开发一个 winapi 图形包装器,我遇到了一个 c2374 错误“重新定义;多重初始化”。我制作了一个非常简化的程序来说明我的问题,我希望有人可以帮助我解决这个问题。注意:此处的代码仅用于说明发布,这就是为什么您看不到包含级联的原因。

主文件

#include <iostream>
#include "functions.h"
#include "constants.h"


void main()
{
}

///////////////////////////////////////// ///////////////////////

函数.h

#include "constants.h"

函数.cpp

#include "functions.h"

///////////////////////////////////////// ///////////////////////

常量.h

double pie = 3.14;

常量.cpp

#include "constants.h"

///////////////////////////////////////// ///////////////////////

错误是;错误 C2374:“派”:重新定义;多重初始化

正如您在此示例中看到的那样,除了能够从不同位置引用常量之外,我并没有尝试编辑饼图或做任何事情。在我的图形包装器中,我试图获得 HRESULT 结果;定义这样当我初始化directx或sprites等时我可以简单地测试失败。小请求:如果你对此有答案,请也指点我一本好的教科书来学习多文件编程或其他东西,我真的在教自己的一切,负担不起的课。谢谢你。

进步:

头文件现在包含一个新的代码块

#ifndef //stuff//
#def    //stuff//

//code

#endif

每个都有自己独特的标签。对 LNK2005 的错误更改:“double pie”(?pie@@3NA) 已在 constants.obj 中定义。

注意:虽然有人建议使用 const 来解决这个问题,但我想避免这种情况,因为它代表的更复杂的程序需要变量是可编辑的。

4

1 回答 1

2

您需要确保包含的头文件只编译一次 - 您的代码将编译 constants.h 至少两次,因为它包含在 functions.h 和 main.cpp 中。为了保证这一点,在每个 .h 文件的开头放置以下语句:

#pragma once

请注意,虽然编译器广泛接受,但以上是非标准选项。如果您想采用标准支持的解决方案,您可以使用宏/预处理器指令,如下所示:

#ifndef __CONSTANTS_H
#define __CONSTANTS_H 1
//
const double pie = 3.14;
//
#endif
于 2013-04-29T23:40:54.760 回答