Basisklasse undefiniert trotz include

Hallo,

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.

Danke im Voraus

Auch hallo.

Hallo,

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 ?

HTH
mfg M.L.

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).

Servus!

In beiden Files includierst du Slot.h, wozu dann die Vorwärtsdeklaration ‚class Slot;‘ ??

Ist dieser Compilererror der erste in der Fehlerliste, oder ist es evt. ein folgefehler?

Du kannst mir auch den Code mailen, dann schau ich mir das mal an.

Gruß Pauli!

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

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?

Grüße

CMБ

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 :frowning: 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]