stack aus abgeleiteten klassen
-
Hi
ich wollte ein stack aus abgeleiteten klassen machen,
dazu gibt es eine basisklasse, von der man klassen ableitet und diese im stack zusammenfasst,so:
stack.items[0].Render()
wobei items[0] eine abgeleitete klasse von item ist und nich item selbst..ich hab eine Basisklasse
class item { public: virtual void Render() = 0; };
dann der stack:
#define MAXSTACK 2 class Cmenustack { public: Cmenustack(); int count; item *items[MAXSTACK]; void Push(item *menu); void Pop(); item *GetTopItem(); }; Cmenustack::Cmenustack() { this->count = 0; for(int i=0;i<MAXSTACK;i++) this->items[i] = NULL; } void Cmenustack::Push(item *menu) { this->items[this->count] = menu; this->count++; } void Cmenustack::Pop() { this->count--; for(int i=0;i<this->count;i++) this->items[i] = this->items[i+1]; this->items[this->count] = NULL; } item *Cmenustack::GetTopMenu() { return this->items[0]; }
dann ein abgeleitetes element:
class CMainMenu : public item { public: virtual void Render(); }; void CMainMenu::Render() { printf("Hello World from MainMenu::Render()!!\n"); } //und das HP: int main(int argc, char *argv[]) { CMainMenu mainmenu; Cmenustack st; st.Push((CMainMenu*)&mainmenu); st.items[0].Render(); //hier fehler -> Render wurde nicht deklariert.. st.Pop(); return 0; }
-
Klappt doch:
class Item { public: virtual void Render() const = 0; }; class MainMenu : public Item { public: virtual void Render() const; }; void MainMenu::Render() const { std::cout << "Hello World from MainMenu::Render()!!\n"; } class MenuStack { enum { MAX_STACK = 2 }; private: int count; Item *items[ MAX_STACK ]; public: MenuStack(); void Push( Item *item ); Item *Pop(); Item *Top() const; }; MenuStack::MenuStack() : count ( 0 ) {} void MenuStack::Push( Item *item ) { assert( count < MAX_STACK && "Stack is full" ); items[ count++ ] = item; } Item *MenuStack::Pop() { assert( count > 0 && "Stack is empty" ); return items[ --count ]; } Item *MenuStack::Top() const { assert( count > 0 && "Stack is empty" ); return items[ count-1 ]; }
-
danke aber habs versucht:
int main(int argc, char *argv[]) { MainMenu mainmenu; MenuStack st; st.Push(&mainmenu); st.Top().Render(); st.Pop(); return 0; }
sagt schon wieder: "Render wurde nicht deklariert" in main()
aber wenn ich jetzt kein array von items hab sondern nur ein *item
dann funktionierts!
-
int main(int argc, char *argv[]) { MainMenu mainmenu; MenuStack st; st.Push(&mainmenu); st.Top().Render(); /* Das ganze ist doch ein Pointer also müsste es wohl st.Top()->Render(); heißen!? */ st.Pop(); return 0; }
Gruß
-
Dummie schrieb:
st.Top().Render(); /* Das ganze ist doch ein Pointer also müsste es wohl
So isses!
-
ähm oke den Wald vor lauter Bäumen nich gesehen, danke Leute!!
-
Du siehst den Baum immernoch nicht, denn der ist std::stack