Visiual Studio Compiler Problem



  • Hallo zusammen,

    ich habe ein Template, welches folgende Methoden definiert:

    bool List<T>::contains(T & a){
     .. do something
    return a bool;
    }
    
    bool List<T>::contains(T & a) const {
      return contains(a);
    }
    

    Der GCC akzeptiert dies, aber der VS Compiler erzählt mir was von Rekursion, welche zum Pufferüberlauf führt. Wie bekomme ich den VS Compiler dazu, dies korrekt auszuwerten? Gibt es Optionen oder Macros, welche ich setzen muß?

    Danke!
    uwe



  • Ich sehe den Sinn der Nicht - const Methode nicht ...
    Beide geben doch eine Kopie eine bool - Wertes zurück, auch mit dem Rückgabewert der Nicht - const - Variante kann man das Objekt also nicht verändern, es sei denn, der 'do something' - Teil verändert das Objekt, aber dann könnte diese Methode auch nicht von der const - Variante aus aufgerufen werden ...

    Also: Definier lediglich die const - Variante.



  • und übergib eine const-Referenz



  • vielen dank. 🙂



  • Jetzt frage ich mich doch, warum der GCC den originalen Code akzeptiert. Schließlich hat der Compiler doch in der const-version nur die const-version (also sich selbst) zur Verfügung, bei der Suche nach Kandidaten für den Aufruf von contains.


  • Mod

    Decimad schrieb:

    Jetzt frage ich mich doch, warum der GCC den originalen Code akzeptiert.

    Weil daran nichts auszusetzen ist. Poste doch mal ein vollständigen Minimalcode und die VC++-Version, die damit aussteigt.



  • Ahhh, ditsch, irgendwie kam ich eben auf den Gedanken, dass nur weil es eine Endlosrekursion ergäbe, es nicht kompilierbar wäre... Keine Ahnung warum. In diesem Fall finde ich aber sympathisch vom MSVC++, dass er auf den const-Fehler hinweist. ^^


Anmelden zum Antworten