Inklassen Problem
-
Hi,
ich habe ein Problem, ich muss gerade eine In-Klasse-Klasse benutzen, das sieht so aus: eine Funktion aus der Klasse benutzt eine Variable aus der der Inklasse. Bei dem BefehlAnimvar.standan++;}
funktioniert das, aber
if( Animvar.standan == ANIMEND) Animvar.standan = 0;
Funktioniert nicht, Animvar ist die Inklasse, standan ist ein int und ANIMEND ist ein define und bedeutet im moment 21
[ Dieser Beitrag wurde am 27.03.2003 um 20:39 Uhr von 3xtr3m3 N00b5tyl0r editiert. ]
-
Und was funktioniert nicht?
-
Ich bekomme einen "parse error before . " (Compieler=G++)
-
Dann scheint der Compiler an der Stelle ein Problem mit 'Animvar' zu haben.
Kann man so nicht sagen wo der Fehler ist.
-
Kann eigentlich nicht sein, die Funktion sieht nähmlich so aus:
void Character::stand() { if(check("stand") == 0) { draw_sprite(bmp, (BITMAP *)Pl[STAND][Animvar.standan].dat, 0, 0); Animvar.standan++; if( Animvar.standan == ANIMEND) Animvar.standan = 0; } }
und Ich verstehe nicht wieso er in der 1. und 3. Zeile ein Problem mit der Animvar-Klasse hat und in der 2. nicht
-
Oft ist nur die erste Fehlermeldung aussagend und der Rest sind Folgefehler.
-
Wenn du mit In-Klasse-Klasse sowas meinst:
class X { public: int x; class Y { public: int y; void modifyX (); }; void modifyY (); }; void X::modifyY () { y = 10; } //geht nicht! void Y::modifyX () { x = 20; } //geht auch nicht! //es würde auch nicht gehen Y.y = 10 oder X.x = 20 oder this->Y.y = 10 etc. //sowas funktionier einfach nicht, weil in C++ der Begriff Klasse nur //soviel wie Schablone bedeutet. Du musst ungefähr so vorgehen: class X { public: class Y { public: int y; }; Y my_y; void modify () { my.y = 20; } };
-
Aha, THX
-
Am besten mal die Macros BEGIN_INTERFACE_PART, END_INTERFACE_PART und METHOD_PROLOGUE (in MSVC) anschauen.
Nachtrag:
allgemeine Lösung sieht ungefähr so aus:#define BEGIN_INNER_CLASS(OuterClass, InnerClass) \ class InnerClass; \ friend class InnerClass; \ class InnerClass \ { \ private: \ OuterClass* pThis() \ { return (OuterClass*)((BYTE*)this - offsetof(OuterClass, m_X##InnerClass)); } \ public: #define END_INNER_CLASS(InnerClass) } m_X##InnerClass;
das wurde kürzlich auch so ähnlich hier mal gepostet, mußt du mal suchen.
[ Dieser Beitrag wurde am 28.03.2003 um 23:58 Uhr von CodeWalker editiert. ]
-
offsetof klinkt nach etwas msvc only und das rum gecaste sieht auch nicht gut aus
-
offsetof klinkt nach etwas msvc only
Nein. offsetof ist Standard-C++. Ist allerdings nur für PODs definiert.
-
Brrrrr, mehrzeilige #defines
-
@MaSTaH
man muß ja nicht - man kanns ja auch jedesmal ausschreiben