Dateiabhängigkeiten -> Fehler beim Einbinden

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. :smile:

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. :smile:

Das ist schon ok. so :wink:

Grüße

CMБ

Ich wußte das du das sagst! :smile: (owT)
Gruß
Stefan