c++多个.cpp文件错误c2374

C++ mutlipule .cpp files error c2374

本文关键字:错误 c2374 文件 cpp 多个 c++      更新时间:2023-10-16

我正在研究winapi图形包装器,我遇到了c2374错误"redefinition;多个初始化"。我制作了一个非常简化的程序来说明我的问题,我希望有人能帮助我解决这个问题。注意:这里的代码只是为了说明问题,这就是为什么你没有看到一个级联的包含。

main.cpp

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

void main()
{
}

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

functions.h

#include "constants.h"

functions.cpp

#include "functions.h"

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

constants.h

double pie = 3.14;

constants.cpp

#include "constants.h"

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

错误;error C2374: 'pie': redefinition;多个初始化

正如你在这个例子中看到的,我没有试图编辑pie或做任何事情,除了能够从不同的地方引用常量。在我的图形包装我试图有一个HRESULT结果;小请求:如果你有这个问题的答案,请告诉我一本好的教科书来学习多文件编程或其他东西,我实际上是自学一切,负担不起课程。谢谢你。

进步:

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

#ifndef //stuff//
#def    //stuff//
//code
#endif

都有自己独特的标签。"double pie" (?pie@@ 3na)已经定义在constants.obj.

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

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

#pragma once

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

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