CompilierError C2662



  • Error Message:
    error C2662: 'Vector::x' : cannot convert 'this' pointer from 'const Vector' to 'Vector &'...

    Headerdefinition:  (unveränderliche Vorgabe)
    static void renderWithVertexNormals(CGHalfEdgeStructure &hes);
    
    CPP Methodenaufruf:   (unveränderliche Vorgabe)
    void CGNormalConstructor::renderWithVertexNormals(CGHalfEdgeStructure &hes)
    {
    inhalt
    }
    
    Inhalt:
    {
    ...
    float x=hes.x();   //möchte den Inhalt der x-komponente des Vektors in einer
                       //float-variable speichern        
    ...
    }
    

    Kann ich dem noch was hinzufügen? Ich sitze seit stunden an diesem Problem und weiß nicht, wie ich das lösen kann.
    Habt ihr einen Vorschlag?
    Danke 😉



  • Wie sieht den der Rückgabewert Deiner Methode x() aus?



  • der ist double. hes ist eine struktur, die einen vector zurückgibt. und sie besitzt mitunter 3 methoden. x(),y(),z() ...je doublewerte (man kann grad kritisieren, dass ich float genommen habe..aber das bewirkt hier nichts)



  • Ich dachte eigentlich, dass Du die Definition Deiner Methode sehen lässt. Wenn die nämlich so

    double& x(void) const { return _x; }
    

    aussieht, dann versuchst Du auf dem Ursprünglichen Wert (_x) zu arbeiten. Da die Methode aber als const definiert ist darfst Du den Wert aber nicht verändern. Du müsstest also

    const float x = hes.x();
    

    nehmen.

    Willst Du Ihn doch verändern musst Du das const in der Methode weglassen. Also:

    double& x(void) { return _x; }
    

    Oder wenn Du eine "Arbeitskopie" benötigst, die Du verändern wills ohne den eigentlichen Wert zu verändern, dann musst Du eine Kopie zurück geben. Das sähe dann so aus:

    double x(void) const { return _x; }
    

    Viele Grüße
    Knecht



  • hmm. Das ist ein bisschen schwieriger. Die Methode x() darf ich nicht ändern. Hier die definition der Methode x (und y(), z())

    class Vector {
    public:
    Vector() { c[0] = c[1] = c[2] = 0.0; }
    void normalize();
    double &x() { return c[0]; }
    double &y() { return c[1]; }
    double &z() { return c[2]; }

    };

    Irgendwie muss ich den wert aus dem vector bekommen (also aus methode x(),y(),z()...um den wert von anderen vektoren zu mitteln...und ich komme da gar nicht klar 😞 )
    lg chrischan



  • Dann füg halt noch folgende drei Methoden dazu:

    double x() const;
    double y() const;
    double z() const;
    


  • Das ist hier nicht möglich, da ich nur die cpp verändern darf.
    gibt es eine möglichkeit, wie ich den den wert aus hes.x() abspeichern kann? (so, dass ich ihn dann verarbeiten kann) 😞



  • Dem Fehler zu folge muss der Vektor hes ein konstantes Objekt sein.
    Da du ihn nur liest, könnte folgender Hack funktionieren:

    Vektor& refAufHes = const_cast< Vektor& >( hes );
    
    float x = resAufHes.x();
    

  • Mod

    hes ist vom Typ CGHalfEdgeStructure& und nicht Vektor. Oder ist Letzteres etwa ein typedef auf const Vektor? Mich wundert, dass hier schon wieder seitenlang halbgare Tipps gegeben werden, ohne das auch nur grundlegende Definitionen als Basis bekannt sind.



  • Wenn hes kein Vektor ist, wie ist dann folgende Fehler ausgabe bei der Zeile float x = hes.x() möglich?

    error C2662: 'Vector::x' : cannot convert 'this' pointer from 'const Vector' to 'Vector &'...


  • Mod

    lolz schrieb:

    Wenn hes kein Vektor ist, wie ist dann folgende Fehler ausgabe bei der Zeile float x = hes.x() möglich?

    Wir verwenden hier keine Glaskugeln. Vielleicht ist hes ein Vektor, vielleicht auch nicht. Jedenfalls ist es nicht möglich, mit derart wenig Information, halbwegs sicher urteilen. Die Folge sind dann wieder ewig lange Threads, die nur vortäuschen, ein interessantes Thema zu behandeln, in Wirklichkeit helfen wenig bis gar nicht.


Anmelden zum Antworten