Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [C++] Die Headerdatei-Einbindung macht mich ganz verrückt (https://www.delphipraxis.net/103092-%5Bc-%5D-die-headerdatei-einbindung-macht-mich-ganz-verrueckt.html)

Matze 9. Nov 2007 19:40


[C++] Die Headerdatei-Einbindung macht mich ganz verrückt
 
Hi,

ich bin grad so geladen und hoffe, dass ich hier nicht anfange, böse Ausdrücke zu nutzen. *g*
Seit Stunden (nicht übertrieben) sitze ich an diesem Problem:

Ich habe 5 Klassen und folgende Einbindungen nutze ich:

stdafx.h:
Code:
#include "CHochschule.h"
CHochschule.h:
Code:
#include "CKommunikation.h"
CKommunikation.h:
Code:
#include "CPruefungsamt.h"
CPruefungsamt.h:
Code:
#include "CStudent.h"
#include "CPruefung.h"
#pragma once ist überall drinnen und das würde ich auch gerne so lassen.
In den Klassen-CPP-Dateien binde ich lediglich jeweils die zugehörige Headerdatei der Klasse ein.

Da ich die Instanz von CHochschule in der main()-Funktion erstelle, jedoch von CPruefungsamt auf diese Instanz zugreifen möchte, schreibe ich in der Pruefungsamt.h das hier:

Code:
protected:
   CHochschule *hochschule;
dann erhalte ich diesen Fehler:

Zitat:

Error 1 error C2143: syntax error : missing ';' before '*'
Ohne diese Zeile lässt sich alles einwandfrei kompilieren.

Es wäre schön, wenn einer von euch weiß, was das Problem ist und wie ich es beheben kann. Denn so kann ich an dem Projekt nicht weiterarbeiten, weshalb das besonders ärgerlich ist.

Ich hoffe, ich habe alle relevanten Infos zur Problemlösung genannt.

Frustriert grüßt
Matze

OregonGhost 9. Nov 2007 20:23

Re: [C++] Die Headerdatei-Einbindung macht mich ganz verrück
 
ich hab zwar auf Anhieb nicht deine Struktur durchschaut, aber vermutlich benutzt du eine Klasse, bevor sie deklariert ist. Wenn du nur einen Zeiger brauchst, kannst du eine Vorwärtsdeklaration mit
Code:
class CHochschule;
machen.
Zum Beispiel am Anfang von Pruefungsamt.h.

Matze 9. Nov 2007 20:34

Re: [C++] Die Headerdatei-Einbindung macht mich ganz verrück
 
Hallo,

hm, ich habe in der main() folgenden Code, um die Instanz von CHochschule zu erzeugen:

Code:
CHochschule hs;
hs.SemesterBeginn();
Nun brauche ich in der CPruefungsamt.h einen Pointer auf diese Instanz, um auf diese zugreifen zu können. Das ist das, was ich erreichen möchte. Da CHochschule.h jedoch in der stdafx.h eingebunden ist, ist CHochschule in der CPruefungsamt.h bekannt (Das kann ich auch überprüfen, indem ich in dieser Headerdatei das hier eingebe: "CHochschule::". Da popt dann das Fenster mit den Methoden auf, was mir zeigt, dass CHochschule bekannt ist. Daher brauche ich hier keine Vorwärtsdeklaration.).

Der Fehler wird jedoch in der CPruefungsamt.h durch diese Zeile ausgelöst:

Code:
CHochschule *hochschule;
Daher kann es doch eigentlich keine Konflikte geben, erst recht nicht, was die Deklaration von CHochschule anbelangt. ich weiß auch nicht, was diese eine Zeile mit den Headerdateien anstellen möchte, das dürfte doch keine Auswirkungen darauf haben.

Nachtrag: :shock: Mit der Vorwärtsdeklaration funktioniert das wirklich, danke. Doch das kann ich mir absolut nicht erklären. Kann man dies nicht auch ohne diese lösen?
Nachtrag 2: Ich vermute, dass die CPruefungsamt.cpp, die stdafx.h einbindet, vor der CPruefungsamt.h durchlaufen wird, weshalb CPruefungsamt.h die Klasse CHochschule noch nicht kennt.

OregonGhost 9. Nov 2007 21:56

Re: [C++] Die Headerdatei-Einbindung macht mich ganz verrück
 
Ich kann dir aus der Praxis nur sagen, dass man in C++, wenn man gewisse Abhängigkeiten hat, häufig nicht um Vorwärtsdeklarationen drumherum kommt, mit allen Konsequenzen, die das hat. Es ist nicht ganz so einfach, Code in C++ zu designen, der das nicht benötigt.

Matze 9. Nov 2007 22:01

Re: [C++] Die Headerdatei-Einbindung macht mich ganz verrück
 
Hi,

ah dann werde ich mich daran gewöhnen müssen. Danke. :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:27 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz