LValue



  • Warum ergibt folgendes CodeFragment folgenden Fehler:

    error C2106: '=': Linker Operand muss ein L-Wert sein

    p_tempNode->getNext()=NULL;
    

    wobei getNext() einfach einen Zeiger returned? An NULL kanns nicht liegen.

    Danke!



  • Hallo

    weil getNext() eine Methode ist, der man so keinen Wert zuweisen kannst.
    Sondern Methoden/Funktionen übernehmen Parameter und geben einen Wert zurück.

    Also verwende statt der Get- ( = etwas auslesen) besser eine Set-Methode ( = etwas verändern) mit passenden Parameter.

    bis bald
    akari



  • WTF schrieb:

    Warum ergibt folgendes CodeFragment folgenden Fehler:

    error C2106: '=': Linker Operand muss ein L-Wert sein

    p_tempNode->getNext()=NULL;
    

    wobei getNext() einfach einen Zeiger returned? An NULL kanns nicht liegen.

    Danke!

    weil der zeiger rauskopiert wird. deine zuweisung kann den node gar nicht ändern. sei froh über die fehlermeldung. willste ändern, gib ne referenz auf den zeiger zurück. oder mach in Node am besten die attribute auch public.



  • volkard schrieb:

    WTF schrieb:

    Warum ergibt folgendes CodeFragment folgenden Fehler:

    error C2106: '=': Linker Operand muss ein L-Wert sein

    p_tempNode->getNext()=NULL;
    

    wobei getNext() einfach einen Zeiger returned? An NULL kanns nicht liegen.

    Danke!

    weil der zeiger rauskopiert wird. deine zuweisung kann den node gar nicht ändern. sei froh über die fehlermeldung. willste ändern, gib ne referenz auf den zeiger zurück. oder mach in Node am besten die attribute auch public.

    Aha? Aber wenn ich eine Referenz anstatt eines Zeigers zurückgebe, ist das nicht ähnlich problematisch, oder hab' ich dich falsch verstanden?

    Kannst du das mit der Kopie etwas Compilerspezifischer erläutern? Was passiert da?

    Danke!



  • (2+3) = 6;
    

    Ist genau das gleiche wie du machen willst. 2+3 liefert ein LValue zurück.

    Gruß



  • FireFlow schrieb:

    (2+3) = 6;
    

    Ist genau das gleiche wie du machen willst. 2+3 liefert ein LValue zurück.

    Gruß

    Das ist mir klar. Was mir nicht klar ist/war, ist der Sachverhalt, dass ich wohl durch meine Zeile da oben einen konstanten Pointer bekomme. Für mein Verständnis returned dort ein Zeiger, der einen L-Wert darstellt.

    Gruß ebenfalls 🙂


  • Mod

    FireFlow schrieb:

    (2+3) = 6;
    

    Ist genau das gleiche wie du machen willst. 2+3 liefert ein LValue zurück.

    Gruß

    nein. jeder funktionsaufruf, der keine referenz ist, ist ein r-value. von den eingebauten operatoren liefern:
    [] präfix++ präfix-- unäres* = += -= *= /= %= <<= >>= &= |= ^= ein l-value.

    bei () cast-operatoren ?: und , kommt es auf die operanden an.

    alle anderen operatoren liefern ein r-value sofern sie überhaupt einen typ haben.


Anmelden zum Antworten