Frage von Icary,

C++ Error: Der Ausdruck muss ein änderbarer L-Value sein

Ich sitzte gerade an einen Programmierprojekt, bei den ich u.a. Höhen berechnen muss. Quellcode:

void Hoehe (Punkt3D neu[], double*a, int Anzahl)

{

double H;

for (int i=0; i<Anzahl; i++)
{
    neu[i].SetH(H) = a[0] + a[1]*neu[i].GetX() + a[2]*neu[i].GetY();
}

}

Ich will also die Höhe für alle (Anzahl) Punkte der Eingabedatei berechnen. Die a[i] habe ich schon berechnet. Die X- und Y-Werte auf die ich mit Get zugreife habe ich zuvor aus der Datei eingelesen. Jetzt bekommen ich leider folgende Fehlermeldung: "Der Ausdruck muss ein änderbarer L-Value sein" für neu[i].SetH(H). Ich habe schon ein wenig Ahnung, aber ich hier komme ich nicht so recht weiter! Danke schonmal für Antworten.

Antwort von halbsowichtig,

SetH(H) ist ein Funktionsaufruf. Zuweisen kannst du nur an eine Variable oder den Setter einer Eigenschaft. Ich vermute, du meintest es so:

H = a[0] + a[1]*neu[i].GetX() + a[2]*neu[i].GetY();
neu[i].SetH(H);
Antwort von Icary,

Es läuft jetzt! Aber könnt ihr mir sagen ob das eine gute Lösung von mir ist?

const int MAX=100; double H[MAX];

for (int i=0; i<Anzahl; i++)
{
    H[i] = a[0] + a[1]*neu[i].GetX() + a[2]*neu[i].GetY();
    neu[i].SetH(H[i]);
}

Danke!

Kommentar von WhiteGandalf,

Man kann eine Aufgabe immer deutlich komplizierter lösen als notwendig.

Wenn Du irgendwann mal anfängst, richtige (komplexe) Programme zu schreiben, wirst Du entweder rechtzeitig lernen, die Finger davon zu lassen, oder elendig untergehen. Aber da Du erst beim Einlernen bist, mußt Du Dir deshalb noch keinen Strick nehmen.

Die temporäre (!) Zwischen- (!) variable "H", die Du selbst ursprünglich erfunden hattest, und deren korrekte Benutzung olle halbsowichtig Dir richtig gezeigt hatte, hast Du hier in ein Array von temporären Variablen verwandelt, von denen jeder Platz nur ein einziges Mal als Wegwerfprodukt ("TEMP"-orär, "ZWISCHEN"-variable - gelle?!) verwendet wird. Das ist pure Verschwendung: Sowohl vom Notationsaufwand als auch vom Speicheraufwand als auch vom Aufwand der CPU-Zyklen her.

=================

Um nochmal konstruktiv zu werden: Stelle Dir TEMP-oräre Werte wie einen Arbeitstisch in der Küche vor, wenn Du ein großes Menü aufsetzen willst!

Du wirst garantiert nicht deswegen, weil Du 5 verschiedene Speisen zubereiten willst, 5 verschiedene Arbeitstische nebeneinander in Deine Küche stellen. Es sei denn, Du wärest ein Koch in einem Restaurant, wo Du gleichzeitig zig verschiedene Gäste zu bedienen hättest und dazu mit 5 verschiedenen Arbeitskräften in der Küche arbeiten würdest. Aber DIESES Thema (Multitasking, Multiprocessing) laß Dir für später - NACHDEM Du verstanden hast, daß Du als ZWISCHEN-Ablage keine 5 Tische in einer privaten Küche benötigst - auch wenn Du im Laufe Deines Lebens abertausende verschiedene Gerichte auf dieser EINEN Zwischenablage zubereiten wirst.

Kommentar von WhiteGandalf,

Man kann eine Aufgabe immer deutlich komplizierter lösen als notwendig.

Wenn Du irgendwann mal anfängst, richtige (komplexe) Programme zu schreiben, wirst Du entweder rechtzeitig lernen, die Finger davon zu lassen, oder elendig untergehen. Aber da Du erst beim Einlernen bist, mußt Du Dir deshalb noch keinen Strick nehmen.

Die temporäre (!) Zwischen- (!) variable "H", die Du selbst ursprünglich erfunden hattest, und deren korrekte Benutzung olle halbsowichtig Dir richtig gezeigt hatte, hast Du hier in ein Array von temporären Variablen verwandelt, von denen jeder Platz nur ein einziges Mal als Wegwerfprodukt ("TEMP"-orär, "ZWISCHEN"-variable - gelle?!) verwendet wird. Das ist pure Verschwendung: Sowohl vom Notationsaufwand als auch vom Speicheraufwand als auch vom Aufwand der CPU-Zyklen her.

=================

Um nochmal konstruktiv zu werden: Stelle Dir TEMP-oräre Werte wie einen Arbeitstisch in der Küche vor, wenn Du ein großes Menü aufsetzen willst!

Du wirst garantiert nicht deswegen, weil Du 5 verschiedene Speisen zubereiten willst, 5 verschiedene Arbeitstische nebeneinander in Deine Küche stellen. Es sei denn, Du wärest ein Koch in einem Restaurant, wo Du gleichzeitig zig verschiedene Gäste zu bedienen hättest und dazu mit 5 verschiedenen Arbeitskräften in der Küche arbeiten würdest. Aber DIESES Thema (Multitasking, Multiprocessing) laß Dir für später - NACHDEM Du verstanden hast, daß Du als ZWISCHEN-Ablage keine 5 Tische in einer privaten Küche benötigst - auch wenn Du im Laufe Deines Lebens abertausende verschiedene Gerichte auf dieser EINEN Zwischenablage zubereiten wirst.

Kommentar von WhiteGandalf,

Hmmm... Doppelpost nach Gateway-Timeput des GuteFrage-Servers. Das war nicht meine Schuld, OK?

Keine passende Antwort gefunden?

Verwandte Fragen

Fragen Sie die Community