c++多个.cpp文件错误c2374
C++ mutlipule .cpp files error c2374
我正在研究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
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- c++多个.cpp文件错误c2374