ich habe 2 Klassen folgendermaßen erstellt:
IPopupMenu.h:
#pragma once
#include "Slot.h"
#include "IPopupMenuItem.h"
#include
class Slot;
class IPopupMenuItem;
class IPopupMenu
{
public:
Slot \*slot;
IGUIImage \*center;
IAnimatedMeshSceneNode \*node;
vector items;
IPopupMenu(void){}
IPopupMenu(Slot \*slot){}
virtual ~IPopupMenu(void){}
};
und MenuBuilding.h
#pragma once
#include "MainClass.h"
#include "Slot.h"
#include "IPopupMenu.h"
class Slot;
class MenuBuilding :
public IPopupMenu
{
public:
MenuBuilding(void);
MenuBuilding(Slot \*slot);
};
MenuBuilding soll von der Basisklasse IPopupMenu abgeleitet sein. Leider bekomme ich beim Kompilieren immer den Fehler:
MenuBuilding.h(8): error C2504: ‚IPopupMenu‘: Basisklasse undefiniert
Warum findet er meine Klasse IPopupMenu nicht? Die Headerdatei binde ich doch oben ein.
ich habe 2 Klassen folgendermaßen erstellt:
IPopupMenu.h:
#pragma once
#include „Slot.h“ #include „IPopupMenuItem.h“ #include
class Slot;
class IPopupMenuItem;
class IPopupMenu
{
public:
Slot *slot;
IGUIImage *center;
IAnimatedMeshSceneNode *node;
vector items;
IPopupMenu(void){}
IPopupMenu(Slot *slot){}
virtual ~IPopupMenu(void){}
};
und MenuBuilding.h
#pragma once #include „MainClass.h“ #include „Slot.h“ #include „IPopupMenu.h“
class Slot;
class MenuBuilding :
public IPopupMenu
{
public:
MenuBuilding(void);
MenuBuilding(Slot *slot);
};
MenuBuilding soll von der Basisklasse IPopupMenu abgeleitet
sein. Leider bekomme ich beim Kompilieren immer den Fehler:
MenuBuilding.h(8): error C2504: ‚IPopupMenu‘: Basisklasse
undefiniert
Warum findet er meine Klasse IPopupMenu nicht? Die Headerdatei
binde ich doch oben ein.
Das ist zwar richtig, aber weiss der Compiler (welcher eigentlich ?) auch um den Ort der Datei auf der Festplatte ?
Oh, sorry, hab ich vergessen anzugeben.
Ich nehm Visual Studio .NET 2003, hab aber nen normales Win32-Konsolenprojekt am Start. Die Header-Datei ist im selben Ordner wie alle Quellen und wird auch gefunden (wenn ich sie bspw. umbenenne, dann schimpft er ja, dass er sie nicht finden kann). Ich kann mir das absolut nicht erklären. Ich hab auch schon probiert über der Klassendefinition von MenuBuilding nochmal
class IPopupMenu;
anzugeben. Aber leider funktioniert das auch nicht (is ja auch ne Deklaration und keine Definition, aber nen Versuch war’s Wert).
class IPopupMenu
{
public:
Slot *slot;
IGUIImage *center;
IAnimatedMeshSceneNode *node;
vector items;
IPopupMenu(void){}
IPopupMenu(Slot *slot){}
virtual ~IPopupMenu(void){}
};
und MenuBuilding.h
#pragma once #include „MainClass.h“ #include „Slot.h“ #include „IPopupMenu.h“
class Slot;
class MenuBuilding :
public IPopupMenu
{
public:
MenuBuilding(void);
MenuBuilding(Slot *slot);
};
Ich neige zur Erklärung von Paulus W,
Warum findet er meine Klasse IPopupMenu nicht? Die Headerdatei
binde ich doch oben ein.
Vielleicht scheitert er schon an der Klasse
IPopupMenu, die aber keinen Fehler aufwirft,
weil sie nicht Instantiiert wird.
Nimm mal bitte die Deklaration von class MenuBuilding
raus und erzeuge dafür eine Variable vom Typ IPopupMenu.
Geht das?
Ich habe die MenuBuilding mal rausgenommen und die IPopupMenu instantiiert…funktioniert tadellos
da ich zu faul bin, noch ne extra-Antwort zu schreiben: @Paulus W:
Das ist auch so ein Mysterium mit der Slot.h
Normalerweise brauche ich die Forward-Deklarationen immer nur, wenn ich Kreuzverweise nutze (wie bei PopupMenuItem). In diesem Fall nutzt aber nur IPopupMenu die Klasse Slot, Slot nutzt aber nicht IPopupMenu. Trotzdem will er die Deklaration immer von mir haben Aber ich bin mir ziemlich sicher, der Slot hat nichts mit dem Fehler zu tun.
Ach wär ich bloß bei meinem C# geblieben, da wär mir das nicht passiert *ggg*.
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]