C++ C++;mutlipule.cpp文件错误c2374

C++ C++;mutlipule.cpp文件错误c2374,c++,linker-errors,C++,Linker Errors,我正在使用winapi图形包装器,遇到了c2374错误“重新定义;多次初始化”。我制作了一个极其简化的程序来说明我的问题,我希望有人能帮助我解决这个问题。注意:这里的代码只是为了说明问题,这就是为什么您没有看到包含的级联 main.cpp #include <iostream> #include "functions.h" #include "constants.h" void main() { } 函数.cpp #include "functions.h" ////////

我正在使用winapi图形包装器,遇到了c2374错误“重新定义;多次初始化”。我制作了一个极其简化的程序来说明我的问题,我希望有人能帮助我解决这个问题。注意:这里的代码只是为了说明问题,这就是为什么您没有看到包含的级联

main.cpp

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


void main()
{
}
函数.cpp

#include "functions.h"
////////////////////////////////////////////////////////////////////////////

常数.h

double pie = 3.14;
常数.cpp

#include "constants.h"
////////////////////////////////////////////////////////////////////////////

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

正如您在本例中所看到的,除了能够从不同的位置引用常量之外,我不会尝试编辑饼图或执行任何操作。在我的图形包装中,我试图得到一个HRESULT结果;定义为,当我初始化directx或sprites等时,我可以简单地测试失败。小要求:如果你对此有答案,请也给我指一本好的教科书来学习多文件编程或其他东西,我实际上是在自学一切,我负担不起课程。多谢各位

进展:

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

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

//code

#endif
每个都有自己独特的标签。更改LNK2005时出错:“双饼图”(?饼图@@3NA)已在constants.obj中定义


注意:虽然有人建议使用const来解决这个问题,但我希望避免,因为更复杂的程序需要对变量进行编辑。

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

#pragma once
请注意,尽管编译器广泛接受上述选项,但这是一个非标准选项。如果要采用标准支持的解决方案,可以使用宏/预处理器指令,如下所示:

#ifndef __CONSTANTS_H
#define __CONSTANTS_H 1
//
const double pie = 3.14;
//
#endif

使用一次#pragma和const关键字。顺便说一句,void main不符合标准。好的,我已将#ifndef内容添加到头文件中,但错误更改为(LNK 2005:“双饼”(?pie@@3NA)已在constants.obj中定义)。我曾尝试在饼图上使用外部前缀,但错误并未消失。@Okari您可能不需要constants.cpp文件-尝试不使用它。@Okari您的意思是,当您没有要编译的“constants.cpp”文件时,它仍然抱怨“constants.obj”中的饼图定义?听起来不对。。。。仅供参考,我在VS2008中编译了这篇文章,只使用了两个头文件和一个main.cpp,它为“const pie”值分配了一个变量。正确,仍然不喜欢它。const确实使它工作,我知道,但我的目标是不使用它,这不是确切的代码,也许pie是一个错误的变量名选择,为此,我需要能够编辑通过函数和main.cpp传播的其他函数的pie。extern是我知道的一个前缀,但是由于这个变量是在一个位置声明和定义的,并且还没有在任何地方引用,所以我希望在开始应用extern和处理二级声明之前,能够以某种方式解决这个错误。。如果可能的话。@Okari也许可以尝试将它变成一个“静态双饼”。您需要返回“constants.cpp”并在那里定义静态变量,但最终应该只有一个定义,并且任何人都可以修改该变量。PS-最好将(公共)静态变量包装在静态类或名称空间中。
#ifndef __CONSTANTS_H
#define __CONSTANTS_H 1
//
const double pie = 3.14;
//
#endif