Klassenobjekt in anderer Klasse
-
Was wird jetzt wo eingebunden? Zeig mal genau die class1.h ohne irgendetwas von Hand zu ändern.Falls ansonsten alles richtig sein sollte habe ich noch eine wilde Spekulation: Dieses stdafx.h bedeutet doch ,dass du Visual C++ benutzt und vorkompilierte Header benutzt. Sind die vorkompilierten Header auch alle aktuell? Ich kenne mich mit VC nicht aus, aber versuch doch mal ein leeres Projekt ohne vorkompilierte Header zu machen und kopier dort deinen Code rein.
-
@DocShoe
Was genau meinst du genau mit einer zirkulären Aggregation. Wäre nett, wen ndu das näher erläutern könntest.@SeppJ
Hab den vorigen Code jetzt mal übersichtlicher gestaltet. Also du class2.h wird in stdafx.h eingebunden und die stdafx.h binde ich generell in jede Datei ein.
Und die Header habe ich jetzt nochmal alle neu kompiliert, aber daran lag es nicht.
-
stdafx.hppbindet man nur in die*.cppund nicht in die*.hppFiles ein.Grüssli
-
Hat VC nicht eine Sonderbehandlung von stdafx.h? Ich habe nur den Wikipediaartikel dazu gelesen, aber da stand, dass alles vor
#include "stdafx.h"ingoriert wird. Nun bindet stdafx.h aber class2.h ein, welches wiederum stdafx.h einbindet. Wird dadurch eventuell alles was davor in stdafx.h steht ignoriert?Denn an sich funktioniert dies so, wenn stdafx.h ein ganz normaler Header ist. Zur Sicherheit habe ich es auch eben noch per Copy&Paste mit dem GCC ausprobiert, damit ich auch keine vergessene Klammer oder Semikolon übersehe. Hat auch funktioniert, außer dass er natürlich windows.h und tchar.h nicht kannte.
-
Dravere schrieb:
stdafx.hppbindet man nur in die*.cppund nicht in die*.hppFiles ein.Gibt es dafür einen Grund? Ich hab bisher immer die stdafx.h in jede Datei eingebunden und hatte bis jetzt noch keine Probleme.
SeppJ schrieb:
Hat VC nicht eine Sonderbehandlung von stdafx.h? Ich habe nur den Wikipediaartikel dazu gelesen, aber da stand, dass alles vor
#include "stdafx.h"ingoriert wird. Nun bindet stdafx.h aber class2.h ein, welches wiederum stdafx.h einbindet. Wird dadurch eventuell alles was davor in stdafx.h steht ignoriert?Was war das denn für ein Artikel? Hab den gerade nicht gefunden. Und wenn vor #include "stdafx.h" alles ignoriert wird, dürfte mein Programm doch gar nicht richtig laufen.
-
Pikkolini schrieb:
Gibt es dafür einen Grund? Ich hab bisher immer die stdafx.h in jede Datei eingebunden und hatte bis jetzt noch keine Probleme.
Wenn du
"stdafx.h"am Anfang jeder .cpp-Datei inkludierst, hast du damit bereits alle Übersetzungseinheiten abgedeckt. Die Einbindung in den Headerdateien ist somit unnötig.Pikkolini schrieb:
Und wenn vor #include "stdafx.h" alles ignoriert wird, dürfte mein Programm doch gar nicht richtig laufen.
Soweit ich weiss, sollte
#include "stdafx.h"bei der Verwendung vorkompilierter Header in MSVC++ die erste Anweisung in jeder .cpp-Datei sein.
-
Hmm ich habe jetzt erstmal alle includes in den Headerfiles auskommentiet und mein Programm funktioniert immernoch

Dann wollte ich ein Klassenobjekt in der Klasse erstellen, und es kam wieder der gleiche Fehler. Wenn ich dann aber einzeln jede Headerfile die ich brauche inkludiere und die stdafx.h weglasse funktioniert es wieder. Wieso muss ich in diesem Fall überhaupt was inkludieren, und wieso kann es nicht die stdafx.h sein?
-
-
Pikkolini schrieb:
@DocShoe
Was genau meinst du genau mit einer zirkulären Aggregation. Wäre nett, wen ndu das näher erläutern könntest.// class1.h #include "class2.h" class Class1 { Class2 dummy; ... };// class2.h #include "class1.h" class Class2 { Class1 dummy; ... };
-
In class1.h ist die Klasse class2 unbekannt. Du must class2.h in class1.h inkludieren.
Edit: Was sollen denn Klassenobjekte sein? Es gibt Klassen, es gibt Objekte, aber Klassenobjekte gibt es nicht.