Überladene virtuelle Elementfunktionen



  • Hallo!

    Habe einen Komischen Fehler bekommen:

    error C2664: 'bool Direct3D2DDevice::Draw( const wchar_t *,const Point2I &,const ColorI &)': Konvertierung des Parameters 1 von 'U32' in 'wchar_t *' nicht möglich
    

    Prototypen:

    virtual bool Draw( const wchar_t *in_fileName, const Point2I &in_dest, const ColorI &in_vertexColor );
       virtual bool Draw( U32 in_fileID, const Point2I &in_dest, const ColorI &in_vertexColor );
    

    Aufruf bei dem der Fehler kommt:

    bool Direct3D2DDevice::Draw( const wchar_t *in_fileName, const Point2I &in_dest, const ColorI &in_vertexColor ) {
       S32 ret = searchTex( in_fileName );
       assert( ret < 0 );
    
       // Hier passiert der Fehler
       return Draw( static_cast<U32>(ret), &in_dest, &in_vertexColor );
    }
    

    Es müsste doch eigentlich möglich sein Elementfunktionen auf diese Weise zu überladen, oder nicht? Die beiden Draw() sind rein virtuelle Elementfunktionen der Interface-Klasse DisplayDevice:

    virtual bool Draw( const wchar_t *in_fileName, const Point2I &in_dest, const ColorI &in_vertexColor ) = 0;
       virtual bool Draw( U32 in_fileID, const Point2I &in_dest, const ColorI &in_vertexColor ) = 0;
    

    Direct3D2DDevice ist public abgeleitet.

    Ich benutze Visual C++ Express Edition SP1.

    Akta



  • Hast du die U32 Version von Draw() fuer deine abgeleitete Klasse schon deklariert (nicht unbedingt definiert)? Afaik guckt der COmpiler erstmal im Scope der Klasse nach, in der du dich grad befindest, und dort sieht er bereits eine Deklaration/Definition von Draw(). Die Deklarationen in der Elternklasse zieht er erst garnicht in Betracht.
    Ist nur ne Vermutung.



  • Ja habe ich, auch wenn diese Funktion noch nicht fertig ist:

    bool Direct3D2DDevice::Draw( U32 in_fileID, const Point2I &in_dest, const ColorI &in_vertexColor ) {
       TEXTURE *tex = searchTex( in_fileID );
       assert( tex == 0 );
    
       RECT destRect;
    }
    

    Edit: Habe nun versucht 'virtual' bei beiden Draw() funktionen in der abgeleiteten Klasse wegzulassen. Hat auch nicht geholfen.



  • Hallo,

    du übergibst die Referenzen falsch.

    Eine Referenz übergibt man so: objekt
    und nicht so: &objekt



  • Stimmt, das wars 🙂 Hatte wohl noch zuviele Zeiger im Kopf vom Listen-Code *g* Danke.


Anmelden zum Antworten