J'ai telles que ce fichier IGlobal.h:#ifndef ne fonctionne que pour les parties "déclaration"?
#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_
que je souvent inclus .h/.cpp au sein du projet. IBitmap
est une structure.
Quand je construis (compilation), il dit:
LNK1169 one or more multiply defined symbols found
LNK2005 "struct IBitmap gBitmapKnobGeneral" [email protected]@[email protected]@A) already defined in ICustomControls.obj
Et en fait, je l'ai pour chaque fois que je IGlobal.h inclus. Ne devriez-vous pas #ifndef éliminer ce problème? Ou le compilateur le fait-il automatiquement pour declarations
et non definitions
?
Où est le '# endif'? Ou est-ce juste le début du fichier? Et pourriez-vous ajouter le message d'erreur entier, s'il vous plaît? Est-ce que 'IPlug_include_in_plug_hdr.h' inclut-guarded? BTW, je pense que '#define PIANOROLL_PATTERN_LENGTH PLUG_PPQ * 4' pourrait entraîner de mauvais problèmes de préprocesseur. Mieux vaut ajouter des parenthèses. – Downvoter
En général, vous devez déclarer une variable dans un en-tête en tant qu'ext, puis la définir dans un fichier cpp. –
@RetiredNinja: oui, habituellement! Mais si je ne le fais pas, le compilateur le fait automatiquement? – markzzz