0
votes

Je veux bulles trier une liste lié individuellement en C ++, mais je continue à faire face à une erreur de lvalue et je suis incapable de le résoudre

Voici le code qui pourrait vous aider à comprendre mon problème, j'utilise une classe de nœuds et une classe de liste. Voici l'erreur: [Erreur] Lvalue requise comme opérande de gauche de la mission. Strong> toute aide serait appréciée .!

class Node{
    private:
        int data;
        Node* next;
    public:
        void SetNext(Node* next){
            this->next=next;
        }
        void SetData(int data){
            this->data=data;
        }
        Node* GetNext(){
            return next;
        }
        int GetData(){
            return data;
        }
};
class List{
    private:
        Node *CurrentLocation;
    public:
        List(){
            CurrentLocation=NULL;
        }
    void SortList(){

            Node *t1,*t2;
            int temp;
            for(t1=CurrentLocation;t1!=NULL;t1=t1->GetNext()){
                for(t2=CurrentLocation;t2!=NULL;t2=t2->GetNext()){
                    if(t2->GetData()>t1->GetNext()->GetData()){
                        temp=t2->GetData();
                        t2->GetData()=t2->GetNext()->GetData();
                        t2->GetNext()->GetData()=temp;
                    }
                }
            }
        }
};


4 commentaires

"Chaque fois que j'exécute le code, je reçois cette erreur de lvalue", improbable. Les types d'erreurs pouvant être décrites comme "Erreur Lvalue" sont des erreurs de compilateur, ce qui signifie que vous ne pouvez pas exécuter le code. Veuillez donner plus de détails sur l'erreur que vous obtenez. En cas d'erreurs de compilateur, citez directement ici, complètement, Verbatim et en tant que texte. En cas d'erreur qui se produit réellement tout en exécutant le résultat de la compilation, etc. Veuillez donner une description beaucoup plus détaillée.


Veuillez fournir un exemple de reproductible minimal du code que vous essayez de compiler ou de fonctionner.


Lecture utile: Quels sont les rapaces, les lvalues, les xvalues, les glvalues ​​et les privalues?


La prochaine fois que vous postez, veuillez indiquer où l'erreur est !


3 Réponses :


1
votes

Vous essayez d'attribuer à un rvalue code>. Ce RValue code> est une copie temporaire de vos données. pas l'original. Il sera détruit dès que l'expression exécute, d'où vous ne pouvez donc pas l'affecter.

Pour attribuer à vos données, vous devez y retourner une référence, comme suit P>

void setData(int newData){
    data = newData;
}


1 commentaires

Bien mieux juste pour vous admettre que vous contournez l'encapsulation et faites le public.



0
votes

Voici la ligne de problème:

T2-> getdata () = T2-> GetNext () -> getdata ();

Le problème est que le problème () La fonction renvoie une copie des données de membre qui n'a pas de stockage local (vous ne l'avez pas attribuée à une variable nommée, c'est donc une rvalue). La raison pour laquelle le compilateur se plaint est que cela ne fait vraiment rien. Vous attribuez une nouvelle valeur à une valeur temporaire qui s'en va immédiatement après la ligne exécutée.

convertir la fonction de membre en xxx

signifie quand vous Appelez T2-> getdata () fait référence à la référence membre de T2 et ce n'est pas juste un temporaire qui va disparaître. < / p>

Vraiment, il est probablement préférable de faire de données une variable de membre public afin que vous puissiez la définir directement


0 commentaires

0
votes

Cette ligne est problématique: xxx pré>

Vous essayez d'attribuer une valeur dans les données code> int. int. Cependant, la fonction getdata ​​code> ne renvoie pas data ​​code> lui-même: est plutôt renvoie une copie temporaire. Vous ne pouvez pas attribuer à des temporaires. Pour simplifier grossièrement, le compilateur appelle les temporaires comme rvalue code> et non temporaire en tant que lvalue code>. Les affectations ont besoin de LValues, car il aurait peu logiciel d'affecter des temporaires. p>

Le meilleur serait d'utiliser la fonction de réglage pour définir la valeur: p>

t2->SetData(t2->GetNext()->GetData());


0 commentaires