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: 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;
}
}
}
}
};
3 Réponses :
Vous essayez d'attribuer à un Pour attribuer à vos données, vous devez y retourner une référence, comme suit P> 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.
void setData(int newData){
data = newData;
}
Bien mieux juste pour vous admettre que vous contournez l'encapsulation et faites le public.
Voici la ligne de problème:
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. P> convertir la fonction de membre en p> signifie quand vous Appelez Vraiment, il est probablement préférable de faire T2-> getdata () = T2-> GetNext () -> getdata (); code> p>
T2-> getdata () code> fait référence à la référence code> membre code> de
T2 code> et ce n'est pas juste un temporaire qui va disparaître. < / p>
de données code> une variable de membre public afin que vous puissiez la définir directement p> p> p>
Cette ligne est problématique: Vous essayez d'attribuer une valeur dans les données Le meilleur serait d'utiliser la fonction de réglage pour définir la valeur: p> 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>
t2->SetData(t2->GetNext()->GetData());
"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 i>!