Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Gelöschter Benutzer

unregistriert

1

11.05.2012, 21:51

Abhängigkeitsprobleme bei Inkludierung in C++

Hallo Community,
ich habe zurzeit ein paar Abhängigkeitsprobleme zwischen mehreren Headerdateien. Mein Problem ist, dass ich die Instanz einer Klasse in einer anderen Quelltextdatei benötige, diese aber in dieser Datei nicht verfügbar ist. Wenn ich die Headerdatei der besagten Klasse inkludieren würde, würden sie sich wiederum gegenseitig inkludieren.

Ich habe es schon mit der Übergabe der Instanz, statische Methoden u.ä. probiert, letzendlich endet aber alles darin, dass der Bezeichner nicht gefunden wird (was ja auch logisch ist).

Hier mein VS Projekt: http://dl.dropbox.com/u/
Es geht hierbei hauptschlich um den Zugriff auf den "BlockManager" in CBlock.cpp in Zeile 7.


Viele Grüße
Justus

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Justus96« (11.03.2013, 18:36)


2

11.05.2012, 21:52

Stichwort: Forward declaration

Gelöschter Benutzer

unregistriert

4

11.05.2012, 22:19

Danke für die extrem schnelle Antwort.

Ich habe zu diesem Thema folgendes Tutorial gefunden: http://www.drakon.ch/?id=&offset=5&mobile=0&show_entry=77

Die Vor-Deklaration von CBlockManager funktioniert nicht, da ich ja in Zeile 7 auf deren Member zugreifen möchte.
Andersherum (also die Vor-Deklaration von CBlock & Inkludierung von CBlockManager.h) wirft folgende Fehlermeldung raus:

Quellcode

1
1>c:\entwicklung\sfml\tetris\tetris\cblockmanager.cpp(17) : error C2514: 'CBlock': Klasse besitzt keine Konstruktoren

...obwohl ein Konstruktor für ein Parameter vom Typ "CBlockManager*" vorhanden ist.

edit: @drakon: Habe ich schon gefunden. Danke ;)
edit2: Um es nochmal zu verdeutlichen: http://dl.dropbox.com/u/53602417/Project2.zip

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Justus96« (11.05.2012, 22:25)


Oberon

Treue Seele

Beiträge: 181

Wohnort: Österreich

Beruf: Student

  • Private Nachricht senden

5

11.05.2012, 22:32

Forward Deklarationen sind (hauptsächlich) für Header: in cpp Dateien sollte es, wenn man es richtig macht, keine Probleme damit geben, die Header aller benötigter Klassen zu includen. Also: in CBlockManager.cpp kannst du CBlock.h ruhig includen.
Zur Verdeutlichung die Reihenfolge der Dateiinhalte, unabhängig von der Reihenfolge in der du die #includes in CBlockmanager.cpp schreibst:
  • CBlockManager.hpp (direkt oder über CBlock.hpp inkludiert)
  • CBlock.hpp
  • Rest von CBlockManager.cpp

Für die Zukunft: Ich denke, die meisten hier werden keine Lust haben, sich ein VS-Projekt herunterzuladen und zu entpacken. ;) Ein minimales Beispiel, hier im Forum gepostet, wird sowohl uns als auch dir (beim Erstellen des Minimalbeispiels) helfen, den Fehler zu finden.

Gelöschter Benutzer

unregistriert

6

11.05.2012, 22:52

Okay, vielen Dank. Mit der Hilfestellung funktioniert es jetzt.

Noch eine kleine Verständnisfrage: Dass es jetzt funktioniert, wenn ich CBlock.h in CBlockManager.cpp inkludiere liegt daran, dass der Compiler zunächst einzelne *.obj Dateien erzeugt, sodass die Quelldateien so unabhängig voneinander sind?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

12.05.2012, 08:14

Nein. Das liegt daran, dass deine Include-Abhängigkeiten jetzt keine Zyklen mehr aufweisen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige