Hantieren mit mehreren Dateien
-
Ich habe das Problem, das ich meine Codes langsam unter mehreren Dateien verteilen muss. Bisher habe ich den Code wie folgt verteilt:
Ich habe eine Main datei, sie includiert die "Forge.h". Die "Forge.h" includet "A.h" und "B.h". Die "A.cpp" includet wiederum die "Forge.h", und die "B.h" wiederum die "Forge.h". "A.h" und "B.h" includieren sich gegenseitig. Außerdem ist in jeder headerdatei ein ifndef, wenn false ist, wird dann definiert. Der name der definition ist immer der dateienname. mein Problem ist nun, das "A.h" klassen deklarationen aus "B.h" findet, aber "A.h" aus "B.h" nicht! Hier mal ein wenig genauer:
Forge.h:
#ifndef _FORGE #define _FORGE #include "A.h" #include "B.h" #endifA.h:
#ifndef _FORGEA #define _FORGEA #include "B.h" #endifB.h:
#ifndef _FORGEB #define _FORGEB #include "A.h" #endifA.cpp:
#include "Forge.h"B.cpp:
#include "Forge.h"Wenn ich nun in A.h eine Klasse deklariere, kennt B.h sie nicht! B.h soll diese aber kennen, denn dafür hatte ich dieses Prinzieb eigentlich gedacht

-
Schau dir mal forward declarations an.
-
Ich habe es bereits ausprobiert diese in der "Forge.h" zu benutzen, leider ist diese Klasse dann undefiniert, beziehungsweise kann sie nicht richtig verwenden.
-
Das könnte man mal in die FAQ schreiben, aber da schaut ja doch keiner nach...
-
Ich habe bereits in die FAQ geschaut, da ist ein Thema worum es geht wie hier, leider läßt sich dies bei mir nicht anwenden, da ich meine klasse schlecht extern machen kann, da ic sie erst später in meiner "main" deklariere.
-
erstens: vorwards declaraitonens wie schon gesagt
du schriebst in "A.h" class B; reinzweitens: schlechtes Design...
-
Funktioniert leider auch nicht. Wiso schlechtes Design?
-
so eine kreis abhängigkeit
a braucht (compiliertes) b zum compilen
b braucht (compiliertes) a zum compilendu solltest das so amchen dass die eine klasse die adnere nicht so direkt braucht
-
Leider brauchen beide Klassen einander.
-
Okay, habs nun hinbekommen, es geht so wie gesat wurde, ich habe lediglich die forward deklaration der Klassen nicht dem Namespace hinzugefügt. Leider bekomme ich nun ein paar andere Errors:
c:\dspro\visualcpp\realforge\realforgeerror.cpp : error C2471: Programmdatenbank 'c:\dspro\visualcpp\realforge\debug\vc90.pdb' kann nicht aktualisiert werden c:\dspro\visualcpp\realforge\realforgeerror.cpp : fatal error C1083: Datei (Programmdatenbank) kann nicht geöffnet werden: "c:\dspro\visualcpp\realforge\debug\vc90.pdb": No such file or directorySo einen Error habe ich noch nie in meinem leben gesehen, könnte mir jemand weiter helfen?
-
Ehrlich gesagt habe ich das auch noch nie gesehen, aber da scheint etwas mit deiner Programmdatenbank nicht zu stimmen :p
Nein, im Ernst: Versuch mal, die Projektmappe neu zu erstellen oder die Datenbankdatei zu löschen. Eventuell hilft auch, wenn du ein neues Projekt erstellst.
-
funktioniert nun einwandfrei, musste die debug datei einfach löschen, danke! Ich kenne mich mitlerweile ein wenig mit DX und OpenGL aus, nja, eigentlich schon ganz gut, und nun habe ich vor, jedes neue waich lerne, eine Engine daraus zu schreiben! Ich frage mich nun, ob diese variante wie ich das machen will, mit der Prgrammstrukurierung, für sowas gut geignt ist, oder ob es da eventuell bessere möglichkeiten giebt?