gpt4 book ai didi

c++ - #ifndef 仅适用于 "declaration"部分?

转载 作者:行者123 更新时间:2023-11-30 05:24:21 25 4
gpt4 key购买 nike

我有这样的 IGlobal.h 文件:

#ifndef _IGLOBALS_
#define _IGLOBALS_

#define _USE_MATH_DEFINES

#define PLUG_NUM_CHANNELS 2
#define PLUG_NUM_PRESETS 1
#define PLUG_FPS 100
#define PLUG_PPQ 96
#define KNOB_NUM_FRAMES 128
#define PIANOROLL_MIN_NOTES 2
#define PIANOROLL_MAX_NOTES 8
#define PIANOROLL_MIN_VELOCITY 40
#define PIANOROLL_MAX_VELOCITY 127
#define PIANOROLL_PATTERN_LENGTH PLUG_PPQ * 4
#define LFO_NUM_SAMPLES 882
#define WAVEPLAYER_WIDTH 441
#define WAVEPLAYER_HEIGHT 136
#define WAVEPLAYER_PATH_LENGTH 256
#define ENVELOPE_MIN_VALUE 0.0001

#include <algorithm>
#include <random>
#include <chrono>
#include <math.h>
#include <cmath>
#include "IPlug_include_in_plug_hdr.h"

using namespace std;

// bitmaps
IBitmap gBitmapKnobGeneral;

#endif // !_IGLOBALS_

我经常从项目中的 .h/.cpp 文件中包含它。 IBitmap 是一个结构。

当我构建(编译)时,它说:

LNK1169 one or more multiply defined symbols found
LNK2005 "struct IBitmap gBitmapKnobGeneral" ?gBitmapKnobGeneral@@3UIBitmap@@A) already defined in ICustomControls.obj

事实上,我每次包含 IGlobal.h 时都会有它。 #ifndef 不应该放弃这个问题吗?或者编译器自动只为 声明 而不是 定义 做这件事?

最佳答案

回答#ifndef 对整个文件有效的问题。

问题是当你写 IBitmap gBitmapKnobGeneral;您将在每个包含 header 的源文件中创建一个实例。我假设您要做的是创建一个全局实例。在那种情况下,你会想要写。

  extern IBitmap gBitmapKnobGeneral;

在 IGlobal.h 文件中,然后在其中一个源文件中创建一个实例,例如 IGlobal.cpp with

 IBitmap gBitmapKnobGeneral;

关于c++ - #ifndef 仅适用于 "declaration"部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38699392/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com