000
12.06.2005, 07:55 Uhr
~DarthDevilous
Gast
|
Hier ein paar Ausschnitte aus meinem Code:
C++: |
#define DECLARE_OBJECT(class_name) \ public: \ static const CRuntimeClass class##class_name; \ virtual CRuntimeClass* GetRuntimeClass() const; \
#define IMPLEMENT_OBJECT(class_name, base_class_name) \ const CRuntimeClass class_name::class##class_name( \ #class_name, _RUNTIME_CLASS(base_class_name), Alloc##class_name); \ CRuntimeClass* class_name::GetRuntimeClass() const \ { return _RUNTIME_CLASS(class_name); } \
Object::Object(const char *lpszName/*=NULL*/) : pChildObject(NULL), pParentObject(NULL), pNextObject(NULL), bActive(false) { // Kein Name angegeben, es muss eins generiert werden if (lpszName == NULL) { *const_cast<std::string*>(&strName) = GetRuntimeClass()->GetClassName(); char szObjectCount[16]; ultoa(GetRuntimeClass()->GetNextIndex(), szObjectCount, 10); const_cast<std::string*>(&strName)->append(szObjectCount); } // Den angegebenen Namen übernehmen else *const_cast<std::string*>(&strName) = lpszName; }
class String : public Object { DECLARE_OBJECT(String) public: String(const char *lpszName = NULL) : Object(lpszName) { } }
IMPLEMENT_OBJECT(String, Object)
|
Das Problem liegt darin, dass der Object-Konstruktor, vom String-Konstruktor gerufen, mit GetRunteimClass() sein eigner RuntimeClass und nicht den vom String holt. Wiso? GetRuntiemClass ist ja als virtual deklariert, es sollte doch das vom String gerufen werden??? |