Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

MSVC6 Bug beim Überschreiben virtueller Funkionen: C2555 (war: c2555)

Empfohlene Antworten

Veröffentlicht

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 ?

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.

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

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.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.