[gelöst]Unerklärlicher random fehler

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Dragon
Beiträge: 162
Registriert: Mi 31. Jul 2013, 15:07
OS, Lazarus, FPC: Ubuntu 16.04, CodeTyphon 5.80

[gelöst]Unerklärlicher random fehler

Beitrag von Dragon »

Wiso krieg ich bei

Code: Alles auswählen

for i:= 0 to strtoint(Anzahl) do
           begin
             numbers := numbers + ' ' + inttostr(random(10)); //Das ist Zeile 45
           end;

Immer den fehler:
random.lpr(45,50) Fatal: Syntax error, "." expected but "(" found

hinter random
Zuletzt geändert von Dragon am Mo 21. Mär 2016, 15:00, insgesamt 2-mal geändert.

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

Re: Unerklärlicher random fehler

Beitrag von theo »

Die Fehlerursache liegt wahrsch. nicht in dem gezeigten Code.

Dragon
Beiträge: 162
Registriert: Mi 31. Jul 2013, 15:07
OS, Lazarus, FPC: Ubuntu 16.04, CodeTyphon 5.80

Re: Unerklärlicher random fehler

Beitrag von Dragon »

Das wäre der komplette code

Code: Alles auswählen

library random;
 
{$mode objfpc}{$H+}
 
uses
  classes,
  sysutils,
  strutils,
  uPluginHeader in '..\uPluginHeader.pas';
var
  Irc: TIrcInterface;
 
function InitProc(uid: cardinal; version: Cardinal; IrcInterface: TIrcInterface; DoJoinProc: TDoJoinProc; DoPartProc: TDoPartProc; DoSayProc: TDoSayProc; DoRawProc: TDoRawProc; DoNickChangeProc : TDoNickChangeProc): Boolean;
begin
  Result := true;
  Irc := IrcInterface;
  Randomize;
end;
 
procedure MessageProc(AUser: PChar; AChannel: PChar; AMessage: PChar);
var
content, s                                 :string;
     i, trenner, atrenner, AVG             :integer;
     Min, Max, Anzahl, numbers             :string;
begin
     content := AMessage;
     if AnsiStartsText('!rnd ', Content) then
       begin
         s := Copy(Content, 6, length(Content));
         if s <> '' then
         begin
           //ermittelt minimalwert
           trenner := Pos('|', s);
           Min := Copy(s, 0, trenner-1);
           atrenner := trenner;
           //ermittelt max wert
           trenner := PosEx('|', s,atrenner);
           Max := copy(s, atrenner+1, trenner-1);
           atrenner := trenner;
           //ermittelt anzahl an zahlen
           trenner := PosEx('|', s,atrenner);
           Anzahl:= Copy(s, atrenner+1, trenner-1);
           for i:= 0 to strtoint(Anzahl) do
           begin
             numbers := numbers + ' ' +inttostr(random(10));
           end;
         end;
         writeln('Min:'+ Min + ' Max:' + Max + ' Anzahl:' + Anzahl);
         Say(Achannel, AUser + ': ' + Numbers)
       end;
end;
procedure JoinProc(AUser: PChar; AChannel: PChar);
begin
 
end;
procedure NickChangeProc(AOldNick : PChar; AHost : PChar; ANewNick : PChar);
begin
 
end;
procedure PartProc(AUser: PChar; AChannel: PChar);
begin
 
end;
 
function RawProc(ARaw: PChar):Boolean;
begin
 
end;
 
procedure InfoProc(out Name: PChar; out Version: Cardinal; out Description: PChar);
begin
  Name := 'rnd';
  Version := 1;
  Description := 'Erzeugt random numbers';
end;
 
exports InitProc, MessageProc, JoinProc, PartProc, RawProc, InfoProc, NickChangeProc;
 
begin
end.

Das ist ein Plugin für einen BOT den ich mal gefunden hatte, und auch schonmal verlinkt hatte in einem meiner vorherigen threads

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
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: Unerklärlicher random fehler

Beitrag von m.fuchs »

Die library heißt random und du versuchst in ihr die Funktion random aufzurufen. Das führt zu Problemen. Entweder benennst du die library um oder du änderst die Zeile in:

Code: Alles auswählen

numbers := numbers + ' ' +inttostr(system.random(10));

Dann weiß der Compiler, dass es hier um die Funktion (aus der Unit System) geht.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Dragon
Beiträge: 162
Registriert: Mi 31. Jul 2013, 15:07
OS, Lazarus, FPC: Ubuntu 16.04, CodeTyphon 5.80

Re: Unerklärlicher random fehler

Beitrag von Dragon »

@m.fuchs
Danke der Fehler tritt nun nicht mehr auf

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

Re: [gelößt]Unerklärlicher random fehler

Beitrag von theo »

Was bedeutet gelößt? :lol:

Dragon
Beiträge: 162
Registriert: Mi 31. Jul 2013, 15:07
OS, Lazarus, FPC: Ubuntu 16.04, CodeTyphon 5.80

Re: [gelößt]Unerklärlicher random fehler

Beitrag von Dragon »

@theo
Das dieser fehler jetzt nicht mehr auftritt dafür ein anderer

Code: Alles auswählen

Irc.Say(Achannel, AUser + ': ' + PChar(numbers));

wirft: random.lpr(50,50) Error: Incompatible type for arg no. 2: Got "AnsiString", expected "PChar"

habs sogar schon über eine zweite Varable probiert
bei

Code: Alles auswählen

var pnumbers : pchar;
 
und im code:
pnumbers := PChar(numbers);
Irc.Say(Achannel, AUser + ': ' + pnumbers);


wirft aber den selben error

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: [gelößt]Unerklärlicher random fehler

Beitrag von Warf »

Dragon hat geschrieben:@theo
Das dieser fehler jetzt nicht mehr auftritt dafür ein anderer

Code: Alles auswählen

Irc.Say(Achannel, AUser + ': ' + PChar(numbers));

wirft: random.lpr(50,50) Error: Incompatible type for arg no. 2: Got "AnsiString", expected "PChar"

habs sogar schon über eine zweite Varable probiert
bei

Code: Alles auswählen

var pnumbers : pchar;
 
und im code:
pnumbers := PChar(numbers);
Irc.Say(Achannel, AUser + ': ' + pnumbers);


wirft aber den selben error


Die Konkatenation von Strings und Pchar ist auch wieder ein String versuche:

Code: Alles auswählen

Irc.Say(Achannel, PChar(AUser + ': ' + numbers));

Dragon
Beiträge: 162
Registriert: Mi 31. Jul 2013, 15:07
OS, Lazarus, FPC: Ubuntu 16.04, CodeTyphon 5.80

Re: [gelößt]Unerklärlicher random fehler

Beitrag von Dragon »

@warf
danke das frisst der kompiler jetzt.

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

Re: [gelößt]Unerklärlicher random fehler

Beitrag von theo »

Dragon hat geschrieben:@theo
Das dieser fehler jetzt nicht mehr auftritt dafür ein anderer


Ich meinte das Wort "gelößt" gibt nicht. Es heißt "gelöst" oder "erledigt". :wink:

Dragon
Beiträge: 162
Registriert: Mi 31. Jul 2013, 15:07
OS, Lazarus, FPC: Ubuntu 16.04, CodeTyphon 5.80

Re: [gelöst]Unerklärlicher random fehler

Beitrag von Dragon »

@theo
Da steht doch gelöst *pfeift unaufällig*

Antworten