Can't take the address of constant expression

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
springcore
Beiträge: 5
Registriert: Do 18. Okt 2012, 13:09

Can't take the address of constant expression

Beitrag von springcore »

Hey, ich bins mal wieder.
Nach längerer Programmierpause habe ich mal an dem Programm weitergearbeitet.
Nun habe ich leider ein weiteres Problem... ich bekomme diese Fehlermeldung:

Code: Alles auswählen

Can't take the address of constant expression  
Der Fehler wird an folgender Stelle geworfen:

Code: Alles auswählen

 
procedure TParser.parseLoadData(mitgliedsListe : TListVerwaltung ; datalist : TStringList);
  var
     u,i:integer;
    mitglied : TMitglied;
 
    datas : array of string;
 begin
     SetLength(datas,7);
    i:=0;
    while not(datalist[i] = 'null') do
    begin
       for u:=1 to 7 do
       begin
 
       datas[u] := copy(datalist.Strings[i],1,pos(datalist.Strings[i],'#'));
       delete(datalist.Strings[i],1,(pos(pos(datalist.Strings[i],'#'),'#')));
 
       end;
       mitglied.Create;
       mitglied.setMtgNr(StrToInt(datas[1]));
       mitglied.setName(datas[2]);
       mitglied.setVName(datas[3]);
       mitglied.setDate(datas[4]);
       mitglied.setAdressse(datas[5]);
       mitglied.setOrt(datas[6]);
       mitglied.setPlz(datas[7])
       mitgliedsliste.addItemMitglied(mitglied);
       mitglied.Free;
    end;
    i:=i+1;
 end;
 
Wenn noch weitere Informationen benötigt werden, bitte einfach bescheid geben.

Ich weis, mein Code ist oft etwas unübersichtlich^^

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Can't take the address of constant expression

Beitrag von Socke »

springcore hat geschrieben:Wenn noch weitere Informationen benötigt werden, bitte einfach bescheid geben.
Um welche Zeile geht es genau? Wie sind die Deklarationen der dort verwandten Funktionen und Datentypen (sofern nicht Pascal Standard)?

Edit:
Eine Eigenschaft wird immer als Kopie zurückgegeben. Daher kannst du nicht Delete(TStringList.Strings[index], ...) aufrufen. Variable Parameter müssten den veränderten Wert wieder in die Eigenschaft zurück schreiben. Genau das kann er aber nicht.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Re: Can't take the address of constant expression

Beitrag von theo »

Auch immer schön:

Code: Alles auswählen

 
       mitglied.Create;
  

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2825
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Can't take the address of constant expression

Beitrag von m.fuchs »

theo hat geschrieben:Auch immer schön:

Code: Alles auswählen

 
       mitglied.Create;
  
Kann funktionieren sofern TMitglied ein klassisches Turbo-Pascal-Objekt ist. Deswegen müsste der Fragesteller mal ein wenig mehr liefern.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

gocher
Beiträge: 298
Registriert: Di 23. Nov 2010, 23:41
OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
CPU-Target: 32Bit/64Bit
Wohnort: Geldern
Kontaktdaten:

Re: Can't take the address of constant expression

Beitrag von gocher »

das hatten wir doch schon ich erinnere mich so schwach an ein Parser.Create :!:
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Re: Can't take the address of constant expression

Beitrag von theo »

m.fuchs hat geschrieben: Kann funktionieren sofern TMitglied ein klassisches Turbo-Pascal-Objekt ist. Deswegen müsste der Fragesteller mal ein wenig mehr liefern.
Ja, ist aber eher unwahrscheinlich. Du hast aber recht, dass Code fehlt.

Auch sowas:

Code: Alles auswählen

       mitgliedsliste.addItemMitglied(mitglied);
       mitglied.Free;
  
Könnte falsch sein, je nachdem was in addItemMitglied passiert.

Antworten