Kann Pointer auf ein Objekt in einer anderen Klasse nicht erstellen
-
Hi,
Ich habe die Klasse "ScrollableListElement" und die soll einen static Pointer auf ein Objekt der Klasse "MainMenu" haben. Er sagt mir aber immer C++ forbids declaration of 'MainMenu' with no type. "MainMenu" habe ich aber bei den includes eingebunden, ich weiß echt nicht wo da der Fehler ist:
ScrollableListElement.h:
#ifndef SCROLLABLE_LIST_ELEMENT_H #define SCROLLABLE_LIST_ELEMENT_H #include <string> #include <pspgu.h> #include <pspgum.h> #include "Renderer.h" #include "Controllable.h" #include "GuiObject.h" #include "fontloader.h" #include "MainMenu.h" class ScrollableListElement : public Controllable, public GuiObject { private: // [...] static MainMenu *mm; // Hier meckert er static Controls *ch; // [...] };Was mach ich denn da falsch?
-
Wenn in MainMenu.h wirklich 'MainMenu' deklariert ist (und keinen eigenen Namespace benutzt), dann sollte es keinen Fehler geben - so könnte man einfach denken...
Ich tippe darauf, daß du eine Cross-Reference erzeugt hast, d.h. die beiden Header-Dateien 'ScrollableListElement.h' und 'MainMenu.h' inkludieren sich gegenseitig - und das führt dann zu 'merkwürdigen' Fehlermeldungen.
Um dem zu entgehen, benutzt man Vorwärtsreferenzen (Forward references) - einfach mal danach im Forum oder Internet suchen.
Hier also die Lösung für dein Problem:
class MainMenu; // und #include "MainMenu.h" nicht mehr verwendenNur in der Implementationsdatei (ScrollableListElement.cpp) mußt du dann die vollständige Deklaration von MainMenu kennen, d.h. "MainMenu.h" inkludieren.
P.S: Es scheint aber kein gutes Klassendesign zu sein, daß du innerhalb eines Controls eine statische Instanz eines Menüs einbindest -> aber auch das wirst du sicherlich noch lernen -)
-
Danke für die Antwort, und ja, es ist genau das mit der "Cross-Reference". Danke auf jeden Fall, werd mich mal nach ner besseren Lösung umsehen
