Hallo!
Ich arbeite mit Dev-Cpp 4.9.9.2 an einem C+±Projekt mit 4 Klassen (je eine Header und eine Implementationsdatei), einer Datei für globale Funktionen und Konstanten, sowie main.cpp.
Jede der vier Klassen benötigt zumindest einige der globalen Konstanten und Funktionen. Eine der vier Klassen genieriert Objekte von zwei der anderen Klassen. Deshalb lasse ich sie die beiden anderen Klassen includen. Dadurch wird allerdings die Datei, welche die globalen Funktionen enthält doppelt eingebunden, was zu Fehlermeldungen des Typs Konstante redefiniert führt.
Was kann ich tun, um mein Problem zu lösen.
Viele Grüße
Falk
Hallo Falk
Ich arbeite mit Dev-Cpp 4.9.9.2 an einem C+±Projekt mit 4
Klassen (je eine Header und eine Implementationsdatei), einer
Datei für globale Funktionen und Konstanten, sowie main.cpp.
Jede der vier Klassen benötigt zumindest einige der globalen
Konstanten und Funktionen. Eine der vier Klassen genieriert
Objekte von zwei der anderen Klassen. Deshalb lasse ich sie
die beiden anderen Klassen includen. Dadurch wird allerdings
die Datei, welche die globalen Funktionen enthält doppelt
eingebunden, was zu Fehlermeldungen des Typs Konstante
redefiniert führt.
Was kann ich tun, um mein Problem zu lösen.
In den Header-Files Klasse[1-4].h:
oben:
#ifndef \_GLOBALES\_H\_
#include "globales.h"
#endif
Im Header-File globales.h
#ifndef \_GLOBALES\_H\_
#define \_GLOBALES\_H\_ 1
int globale\_var1;
...
int globale\_var9;
usw.
#else
#error globales.h included more than once
#endif
==\>Ende der Datei
Grüße
CMБ
Mahlzeit!
Was kann ich tun, um mein Problem zu lösen.
Zumindest bei VC 8.xx gibt es:
#pragma once
einfach oben in den Header und Ruhe ist.
Die Erklärung in der Hilfe:
„This can reduce build times as the compiler will not open and read
the file after the first #include of the module.“
Vieleicht konnte der 4er das auch schon?
Gruß
Stefan
Hallo Sefan!
#pragma once
Habe ich in den Header GlobalParameters.hpp eingefügt,…
Vieleicht konnte der 4er das auch schon?
…und er konnte es in der Tat!
Vielen Dank für deine Hilfe!
Viele Grüße
Falk
Hallo CMБ!
Ich habe jetzt zwar Stefans Lösung aufgrund ihrer Kürze umgesetzt, dein Lösungsvorschlag hat mir aber trotzdem sehr geholfen. Vielen Dank für die Idee der bedingten Compilierung!
Viele Grüße
Falk
Hallo Falk!
Die Lösung von CMБ stammt aus den alten Tagen und ist Compiler
unabhängig nutzbar.
Wenn du mal in stdio.h reinschaust dann siehst du folgenden
Konstrukt. Den else Zweig mit „included more than once“ gibt es
allerdings nicht, braucht man eigentlich auch nicht.
#if _MSC_VER > 1000
#pragma once
#endif
#ifndef _INC_STDIO
#define _INC_STDIO
…
…
…
…
#endif
Das nenn ich dann mal doppelt gemoppelt hält besser. 
Gruß
Stefan
Hallo Stefan
Den else Zweig mit „included more than once“ gibt
es allerdings nicht, braucht man eigentlich auch nicht.
Das braucht man für sich „selber“, um bei
größeren Projekten die Übersicht zu behalten
und bei „sich selbst“ flache Abhängigkeits-
hierarchien zu erzwingen.
#ifndef _INC_STDIO
#define _INC_STDIO
…
…
…
…
#endif
Das nenn ich dann mal doppelt gemoppelt hält besser. 
Das ist schon ok. so 
Grüße
CMБ
Ich wußte das du das sagst!
(owT)
Gruß
Stefan