Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mi Jul 09, 2025 19:30

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: statische Funktionen nicht aufrufbar
BeitragVerfasst: Mo Apr 25, 2011 15:19 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 11, 2009 08:02
Beiträge: 532
Programmiersprache: pascal (Delphi 7)
Code:
  1. sharkutils.pas(56,46) Error: Only class methods can be referred with class references
  2.  

Die betreffende Function ist als
Code:
  1. function bla(blubb: T): T; static;
deklariert (ok, sie heißt nicht bla ;) ) Aber jedenfalls steht static daneben. Aufgerufen wird sie mit
Code:
  1. TMyClass.bla(something);
Was passt da nicht? (FPC 2.2.4) Wenn ich wie in Delphi "class function" schreibe, passt das auch nicht.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Apr 25, 2011 15:23 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Mit
Code:
  1. class function bla(blubb: T): T;
sollte das gehen. Wenn nicht zeig mal noch etwas mehr Code.

greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Apr 25, 2011 15:41 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 11, 2009 08:02
Beiträge: 532
Programmiersprache: pascal (Delphi 7)
ok, jetzt geht´s doch. Anscheinend hatte ich vorhin noch irgendeinen anderen Fehler drinnen :?

Aber dafür gib´s ne ganze Reihe Neue Fehlermeldungen (alles Illegal Expression) und zwar jeweils dort, wo eine Klassenstatische Methode eine andere (aus derselben Klasse) aufruft.

Ein Beispiel:
Code:
  1. if a < b then swap(a, b);
Bei swap schreit er. a und b sind hier int64, swap dürfte recht selbsterklärend sein. Jedenfalls ist swap in derselben Klasse deklariert, wie die aufrufende Funktion (hier ggt, weil ich keine Ahnung hab, wie das auf englich heißt ;) )

ps: ich schätze mal, das ganze Zeug wird´s sowieso schon irgendwo geben, aber ich probier sowieso nur ein Bisschen rum (diesmal mit generics, nachdem ich an Macros gescheitert bin ;) ). Benutzen werd ich den Code wahrscheinlich eh nie.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Apr 25, 2011 15:59 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Ein paar zeilen drumherum sowie die zugehörigen Deklarationen sind immer gut ;)

greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Apr 27, 2011 16:44 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 11, 2009 08:02
Beiträge: 532
Programmiersprache: pascal (Delphi 7)
ok, hat ne weile gedauert, bis ich wieder online gekommen bin ;)

Wahrscheinlich ist es wieder nur ein dummer Fehler, aber hier mal der Code:
Code:
  1. unit sharkutils;
  2.  
  3. {$mode objfpc}{$H+}
  4.  
  5. interface
  6.  
  7. uses
  8.   Classes, SysUtils;
  9.  
  10. type
  11.  
  12.   TFrac64 = record
  13.     n, d: int64;
  14.   end;
  15.  
  16.   generic TIntMath<T> = class
  17.     class procedure swap(var a: T; var b: T); static;
  18.     class function ggt(a, b: T): T; static;
  19.   end;
  20.   Int64Math = specialize TIntMath<int64>;
  21.  
  22.   generic TFracMath<T, __IntMath, __IntType> = class
  23.     class function Make(numerator: __IntType; denominator: __IntType): T; static;
  24.     class procedure Make(const numerator, denominator: __IntType; out frac: T); static;
  25.   end;
  26.   frac64 = specialize TFracMath<TFrac64, Int64Math, int64>;
  27.  
  28. implementation
  29.  
  30. class procedure TIntMath.swap(var a: T; var b: T); static;
  31. var x: T;
  32. begin
  33.   x:= a;
  34.   a:= b;
  35.   b:= x;
  36. end;
  37.  
  38. class function TIntMath.ggt(a, b: T): T; static;
  39. begin
  40.   if a < b then swap(a, b);  //----------------------------------------------Fehler------------------------------------
  41.   while b > 0 do begin
  42.     a := a mod b;
  43.     swap(a, b);  //-----------------------Fehler----------------------------------
  44.   end;
  45.   result:= a;
  46. end;
  47.  
  48. class function TFracMath.Make(numerator: __IntType; denominator: __IntType): T; static;
  49. begin
  50.   Make(numerator, denominator, result); //--------------------------------Fehler---------------------------
  51. end;
  52.  
  53. class procedure TFracMath.Make(const numerator, denominator: __IntType; out frac: T); static;
  54. var ggt: __IntType;
  55. begin
  56.   ggt:= __IntMath.ggt(numerator, denominator);
  57.   frac.n:= numerator div ggt;
  58.   frac.d:= denominator div ggt;
  59. end;
  60.  
  61. end.                      


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Apr 27, 2011 17:59 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Mach mal die static;-Dinger weg. Ohne kompiliert es sauber hier.

greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Apr 28, 2011 10:40 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 11, 2009 08:02
Beiträge: 532
Programmiersprache: pascal (Delphi 7)
ok, funzt jetzt. Aber wozu genau gibt es static nun eigentlich, wenn man mit "class function" schon eine statische funktion hat?


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Apr 28, 2011 18:02 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Static ist für Felder gedacht, also z.B.:
Code:
  1. type
  2.   TMyStaticStuff = class (TObject)
  3.   protected
  4.     FMyValue: Integer; static;
  5.   end;


greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 22 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 16 Queries | GZIP : On ]