Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Der linken seite kann nichts zugewiesen werden (https://www.delphipraxis.net/33640-der-linken-seite-kann-nichts-zugewiesen-werden.html)

Pseudemys Nelsoni 10. Nov 2004 14:50


Der linken seite kann nichts zugewiesen werden
 
moin,

jemand ne ahnung was hieran falsch ist?

Delphi-Quellcode:
...

  TChannel = record
    name: string;
    topic: string;
  end;
  TChannels = array[0..4] of TChannel;

var
  Channels: TChannels;

...

function ChannelByName(channel: string): TChannel;
var
  i: integer;
begin
  for i := low(channels) to high(channels) do
    if channels[i].name = channel then
      result := channels[i];
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Channels[0].name := '#test';
  ChannelByName('#test').topic := 'hi'; // hier der fehler
  showmessage(ChannelByName('#test').topic);
end;

...

The-X 10. Nov 2004 14:52

Re: Der linken seite kann nichts zugewiesen werden
 
Zitat:

Zitat von Pseudemys Nelsoni
moin,

jemand ne ahnung was hieran falsch ist?

Delphi-Quellcode:
...

  TChannel = record
    name: string;
    topic: string;
  end;
  TChannels = array[0..4] of TChannel;

var
  Channels: TChannels;

...

function ChannelByName(channel: string): TChannel;
var
  i: integer;
begin
  for i := low(channels) to high(channels) do
    if channels[i].name = channel then
      result := channels[i];
end;

procedure TForm1.Button1Click(Sender: TObject);
Var Temp:TChannel;
begin
  Channels[0].name := '#test';
  Temp:=ChannelByName('#test'); // so sollte es gehen :)
  Temp.topic := 'hi';
  showmessage(ChannelByName('#test').topic);
end;

...


Dax 10. Nov 2004 14:52

Re: Der linken seite kann nichts zugewiesen werden
 
Ganz einfach:
Delphi-Quellcode:
ChannelByName('#test').topic := 'hi';
liefert einen konstanten Record. Was du da tust, ist einer Funktion einen Wert zuweisen, und das geht logischerweise nicht.

Pseudemys Nelsoni 10. Nov 2004 14:55

Re: Der linken seite kann nichts zugewiesen werden
 
@The-X: danke, mal checken ;)

@DAX: ich muss doch irgendwie eine funktion mit einem rekord verknüpfen können oder? ich möchte nicht jedes mal in meinem code das ausführen was meine funktion da tut (also die schleife)

ich möchte das ERGEBNIS der funktion benutzen + .topic und ihm was zuweisen.... geht das denn gar nicht?

Sanchez 10. Nov 2004 14:55

Re: Der linken seite kann nichts zugewiesen werden
 
Zitat:

Zitat von The-X
Delphi-Quellcode:
...

procedure TForm1.Button1Click(Sender: TObject);
Var Temp:TChannel;
begin
  Channels[0].name := '#test';
  Temp:=ChannelByName('#test'); // so sollte es gehen :)
  Temp.topic := 'hi';
  showmessage(ChannelByName('#test').topic);
end;

...

So gehts nicht. TChannel ist nämlich ein Record. Nach der Änderung muss der Original-Record im Array noch aktualisiert werden.

grüße, daniel

Pseudemys Nelsoni 10. Nov 2004 14:58

Re: Der linken seite kann nichts zugewiesen werden
 
kann ich mit der funktion nicht irgendwie einen pointer auf den rekord im array zurückgeben?

The-X 10. Nov 2004 14:58

Re: Der linken seite kann nichts zugewiesen werden
 
:wall: :wall: :wall: Stimmt :gruebel:

Lass dir doch den Index im Array zurückgeben und arbeite damit weiter *tipp*

alcaeus 10. Nov 2004 14:58

Re: Der linken seite kann nichts zugewiesen werden
 
Hi Pseudemys Nelsoni,

Versuchs mal so:
Delphi-Quellcode:
...

  TChannel = record
    name: string;
    topic: string;
  end;
  TChannels = array[0..4] of TChannel;

var
  Channels: TChannels;

...

function ChannelIndexByName(channel: string): Integer;
var
  i: integer;
begin
  Result := -1;
  i := low(channels);
  while (i <= high(channels)) and (result = -1) do
  begin
    if channels[i].name = channel then
      result := i;
    Inc(i);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Channels[0].name := '#test';
  Channels[ChannelIndexByName('#test')].topic := 'hi';
  showmessage(ChannelByName('#test').topic);
end;

...
Du musst die Funktion den Index zurückgeben lassen, nicht den Record.

Greetz
alcaeus

CalganX 10. Nov 2004 15:13

Re: Der linken seite kann nichts zugewiesen werden
 
Hi,
gestatte mir die Frage, warum du kein Objekt verwendest, sprich die Möglichkeiten von Delphi ausnutzt (Stichwort OOP). Wenn du da mit Propertys etc. arbeitest, schaffst du das wesentlich angenehmer. :?

Chris


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz