Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C++] lvalue required as left operand of assignment

    codice:
    Palla.cc: In member function 'void Palla::set_posizione(const Vettore&)':
    Palla.cc:33:16: error: lvalue required as left operand of assignment
    Palla.cc:34:16: error: lvalue required as left operand of assignment
    Palla.cc:35:16: error: lvalue required as left operand of assignment
    Sicuramente é un errore stupidissimo, ma non riesco a capirlo...

    Questa é la funzione (dove omega é di tipo Vettore e membro della classe Palla):
    codice:
    void Palla::set_posizione(const Vettore& p)
    {
    	omega[0] = p[0];
    	omega[1] = p[1];
    	omega[2] = p[2];
    }
    E questa é la definizione dell'operatore [] per la classe Vettore (dove v é uno std::vector<double> membro della classe). Penso che l'errore sia qui...:
    codice:
    double Vettore::operator[](size_t i) const
    {
    	return v[i];
    }
    K. L. Thompson
    You can't trust code that you did not totally create yourself.
    A. Bogk
    UNIX is user-friendly, it just chooses its friends.

  2. #2
    Ho provato anche nel seguente modo:
    codice:
    void Palla::set_posizione(const Vettore& p)
    {
    	double x(p[0]);
    	double y(p[1]);
    	double z(p[2]);
    	
    	omega[0] = std::move(x);
    	omega[1] = std::move(y);
    	omega[2] = std::move(z);
    }
    ma ottengo sempre
    codice:
    Palla.cc: In member function 'void Palla::set_posizione(const Vettore&)':
    Palla.cc:37:24: error: lvalue required as left operand of assignment
    Palla.cc:38:24: error: lvalue required as left operand of assignment
    Palla.cc:39:24: error: lvalue required as left operand of assignment
    Dov'é che sbaglio? Davvero non capisco...

    K. L. Thompson
    You can't trust code that you did not totally create yourself.
    A. Bogk
    UNIX is user-friendly, it just chooses its friends.

  3. #3
    Sapevo che era una stupidata!

    Quello che stavo facendo era una assegnazione a un valore temporaneo (ritornato da operator[] )... Quello che ho fatto inizialmente é stato cancellare il vecchio operator[] e aggiungere questo:

    codice:
    double& Vettore::operator[](size_t i)
    {
    	return v[i]; 
    }
    Ma poi il compilatore si é lamentato per la const correctness (perché p é passato per referenza costante e il nuovo operatore non assicura più che p rimanga invariato).

    Allora li ho lasciati entrambi (overloading) e ora compila. Il compilatore si sbriga da solo su quando utilizzare uno o l'altro... Ho risolto nel modo giusto?

    Grazie.
    K. L. Thompson
    You can't trust code that you did not totally create yourself.
    A. Bogk
    UNIX is user-friendly, it just chooses its friends.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.