Type Helper

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut

Type Helper

Beitragvon Mathias » 1. Jan 2016, 21:19 Type Helper

Er findet die Deklaration von Helper nicht.
Was für eine Unit muss ich einbinden.
Als Muster habe ich syshelph.inc genommen, das es aber eine inc ist, kann ich die Uses nicht finden.

Code: Alles auswählen
type
  TStringHelper = Type Helper for AnsiString
  end;
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3785
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon theo » 2. Jan 2016, 00:20 Re: Type Helper

Code: Alles auswählen
{$modeswitch typehelpers}     


Steht eig. hier http://wiki.freepascal.org/FPC_New_Feat ... pe_helpers
theo
 
Beiträge: 8038
Registriert: 11. Sep 2006, 18:01

Beitragvon marcov » 2. Jan 2016, 13:02 Re: Type Helper

Oder $mode delphi nutzen.
marcov
 
Beiträge: 1028
Registriert: 5. Aug 2008, 08:37
Wohnort: Eindhoven (Niederlande)
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk) | 
CPU-Target: 32/64,PPC(+64), ARM
Nach oben

Beitragvon Mathias » 2. Jan 2016, 16:42 Re: Type Helper

theo hat geschrieben:
Code: Alles auswählen
{$modeswitch typehelpers}     


Steht eig. hier http://wiki.freepascal.org/FPC_New_Feat ... pe_helpers


Danke das wars.

Code: Alles auswählen
type
  TIntHelper = Type Helper for Integer
  public
    procedure Add;
  end;
 
procedure TIntHelper.Add;
begin
   self += 1;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  i:Integer;
begin
  i:=1;
  i.Add;
  ShowMessage(IntToStr(i));
end;   


Das Ergebnis ist 2.

Nur der JCF-Formater hat Probleme damit. der wäre sowieso mal überfällig zu aktualisieren.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3785
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Mathias » 2. Jan 2016, 17:24 Re: Type Helper

So wie es aussieht, geht dies nur mit Standard-Typen, ich habe es mit einem Eigenen probiert, kommt aber "Illegal qualifier".

Code: Alles auswählen
type
  TVector = array[0..2] of Single;
 
  TVectorHelper = Type Helper for TVector
  public
    procedure Add;
  end;
 
procedure TVectorHelper.Add;
begin
  self[0] += 1.0;
  self[1] += 1.0;
  self[2] += 1.0;
end;
 
{ TIntHelper }
 
procedure TIntHelper.Add;
begin
   self += 1;
end;
 
{ TForm1 }
 
procedure TForm1.Button1Click(Sender: TObject);
var
  i:Integer;
  v:TVector;
begin
  i:=1;
  i.Add// Ohne Probleme.
  ShowMessage(IntToStr(i));
  v.Add// Da kommt der Fehler.
end;


Mache ich etwas falsch ?
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3785
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon theo » 2. Jan 2016, 19:42 Re: Type Helper

Weiß ich auch nicht. Vllt. mal hier fragen: http://lists.freepascal.org/cgi-bin/mai ... /fpc-devel
theo
 
Beiträge: 8038
Registriert: 11. Sep 2006, 18:01

Beitragvon Mathias » 2. Jan 2016, 20:42 Re: Type Helper

Ich habe denen eine Mail geschrieben, ich hoffe Google hat gut übersetzt. ;)
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3785
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon theo » 2. Jan 2016, 20:55 Re: Type Helper

Mathias hat geschrieben:Ich habe denen eine Mail geschrieben, ich hoffe Google hat gut übersetzt. ;)

Kommt glaube ich nur an, wenn du dich vorher registriert hast mit deinem Absender.
theo
 
Beiträge: 8038
Registriert: 11. Sep 2006, 18:01

Beitragvon Mathias » 2. Jan 2016, 21:01 Re: Type Helper

Ich habe mich vorhin registriert, weil ich dachte es sei Forum.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3785
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon theo » 3. Jan 2016, 11:54 Re: Type Helper

Ich verlinke hier mal die (erste) Antwort für die "Nachwelt".
http://lists.freepascal.org/pipermail/f ... 36457.html
theo
 
Beiträge: 8038
Registriert: 11. Sep 2006, 18:01

Beitragvon Mathias » 3. Jan 2016, 16:52 Re: Type Helper

Habe ich das richtig verstanden, ich sollte einen Bug-Tracker erstellen ?

http://lists.freepascal.org/pipermail/f ... hread.html
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3785
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon theo » 3. Jan 2016, 17:19 Re: Type Helper

Mathias hat geschrieben:Habe ich das richtig verstanden, ich sollte einen Bug-Tracker erstellen ?

http://lists.freepascal.org/pipermail/f ... hread.html


Nicht einen Bug Tracker, aber einen Eintrag in den Bug Tracker, mit einem möglichst einfachen Beispiel, welches das Problem zeigt und der Fehlermeldung. http://bugs.freepascal.org/
Außerdem sollst du es nochmal in der Mailing List posten, damit Ondrej auch Bescheid weiß.

Die allgemeine Meinung ist, dass das eigentlich funktionieren müsste für statische Arrays.
theo
 
Beiträge: 8038
Registriert: 11. Sep 2006, 18:01

Beitragvon Mathias » 3. Jan 2016, 17:22 Re: Type Helper

Ich habe noch verschiedenes ausprobiert.
Das sollte eigentlich reichen für den Eintrag, da man die Fehler gut sieht.

Code: Alles auswählen
type
 
  TVector0 = array[0..2] of Single;    // Fehler bei v.Add. "unit1.pas(67,5) Error: Illegal qualifier"
  TVector1 = array of Single;          // geht
  TVector2 = record                    // Fehler bei public, "unit1.pas(44,3) Error: Type "TVector2" cannot be extended by a type helper"
    a, b, c:single;
  end;
  TVector3 = array of TVector0;        // geht
  TVector4 = string;                   // geht
  TVector5 = TButton;                  // Fehler bei public, "unit1.pas(45,3) Error: Type "TButton" cannot be extended by a type helper"
  TVector6 = array of TButton;         // geht
 
  TVector = TVector1;
 
 
  { TVectorHelper }
 
  TVectorHelper = Type Helper for TVector
  public
    procedure Add;
  end;
 
implementation
 
{$R *.lfm}
 
{ TVectorHelper }
 
procedure TVectorHelper.Add;
begin
  self[0] += 1.1;
  self[1] += 1.1;
  self[2] += 1.1;
end;
 
{ TForm1 }
 
procedure TForm1.Button1Click(Sender: TObject);
var
  v:TVector;
begin
  SetLength(v, 3);
  v.Add;
  ShowMessage(FloatToStr(v[0]));
end;   
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3785
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon theo » 3. Jan 2016, 17:25 Re: Type Helper

Mach nur den TVector0 Fall. So wenig Code wie möglich und nötig, um den Fehler aufzuzeigen und nur einen einzigen Fall.

Wähle als Projekt "FPC" und als Kategorie "Compiler" im Bugtracker.
theo
 
Beiträge: 8038
Registriert: 11. Sep 2006, 18:01

Beitragvon Mathias » 3. Jan 2016, 17:33 Re: Type Helper

Ich habe mich nun im Bug-tracker eingeloggt.
Nur finde ich den Button nicht mehr, bei dem man einen neuen Eintrag erfassen kann. :oops:

So nur noch das nötigste.
Code: Alles auswählen
type
  TVector = array[0..2] of Single;
 
  TVectorHelper = Type Helper for TVector
  public
    procedure Add;
  end;
 
procedure TVectorHelper.Add;
begin
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  v:TVector;
begin
  v.Add; // "unit1.pas(53,5) Error: Illegal qualifier"
end;
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3785
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

» Weitere Beiträge siehe nächste Seite »
Nächste

Zurück zu Freepascal



Wer ist online?

Mitglieder in diesem Forum: Mathias und 2 Gäste

porpoises-institution
accuracy-worried