Berserker Geschrieben 27. November 2004 Geschrieben 27. November 2004 Hallo, ich kann mit dem msvc6 compiler keine virtuellen template funktionen überschreiben. ms meint, ich solle keine verwenden oder mir dieses vs-net2003 monster zulegen. nunja für unsere situation ist beides schlecht. der einzigste ausweg wäre nun, alle betroffenen klassen - und das sind richtig viele - mit borland zu kompilieren und per dll wieder mit einzubinden, richitg ? Zitieren
Klotzkopp Geschrieben 27. November 2004 Geschrieben 27. November 2004 Was man da tun kann, hängt vom Code ab. Ohne den zu sehen, kann man da nicht viel sagen. Es geht bei dem Bug um die fehlende Unterstützung für kovariante Rückgabetypen bei virtuellen Funktionen. Wenn es dir also gelingt, den Rückgabewert woanders unterzubringen oder den Typ einheitlich zu machen, war's das schon. Aber wie gesagt, was man da tun kann, hängt vom Code ab. Mit Templates hat der Bug nichts zu tun. P.S.: Wieso bezeichnest du VS.NET2003 als Monster? P.P.S.: Den C++-Compiler von VS.NET2003 gibt's kostenlos. Zitieren
Berserker Geschrieben 27. November 2004 Autor Geschrieben 27. November 2004 template <class _CT> class _tBaseToken { // }; template <class _CT> class _tBaseDatabase { typedef _tBaseToken<_CT>tokenType; virtual tokenType *allocateToken(_CT parent)=0; // wir brauchen ne menge solcher }; //first derivate : template <class _CT> class BruteForceDatabase : public _tBaseDatabase<_CT> { public: class tokenType : public _tBaseToken<_CT> { //ctor´s,ops,.... } tokenType* allocateToken (_CT parent) //genau hier knallts dann natürlich { return new tokenType( parentObject, *this); } }; Angewendet werden soll das dann wie folgt : typedef _tBaseToken<_tBot*>Token; typedef _tBaseDatabase<_tBot*>Database; Database*pd2; switch (type) : case TYPE_A : pd2 = ((new BruteForceDatabase<_tBot*>())); //hier gibts dann natürlich : error C2259: //cannot instantiate abstract class due to following members... so, ich hoffe das sind net zu viele details, um da was zu sagen zu können. vs2003 monster ? ok, das liegt an meiner hardware. der ms kram läuft bei inna vmware ;-) vielen dank für die schnelle antwort, seid ja richtig fleißig hier Zitieren
Klotzkopp Geschrieben 27. November 2004 Geschrieben 27. November 2004 Würde es da nicht reichen, wenn allocateToken auch in den abgeleiteten Klassen ein _tBaseToken<_CT>* zurückgibt? Zitieren
Bubble Geschrieben 28. November 2004 Geschrieben 28. November 2004 Wie Klotzkopp schon sagte, der Fehler bezieht sich auf den Typ des Rückgabewertes beim Überschreiben virtueller Funktionen (müssen alle den gleichen Rückgabe-Typ haben, wenn die restlichen Parameter identisch sind). Allerdings: Was spricht eigentlich dagegen den neueren VC++ Compiler zu verwenden? Der 6er ist ja nun wirklich schon seit ein paar Jahren abgelöst. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.