AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Spezielle Konstruktion funktioniert in D2005 nicht mehr
Thema durchsuchen
Ansicht
Themen-Optionen

Spezielle Konstruktion funktioniert in D2005 nicht mehr

Ein Thema von mirage228 · begonnen am 25. Dez 2004 · letzter Beitrag vom 27. Dez 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#1

Spezielle Konstruktion funktioniert in D2005 nicht mehr

  Alt 25. Dez 2004, 15:33
Hallo,

ich hatte unter Delphi 7 diese Konstruktion (bzw. Klasse), die ohne Probleme funktionierte:

Delphi-Quellcode:
type
  TCipher = class(TObject)
  protected
    class function GetGUID(): TGUID; virtual; abstract;
    class function GetName(): WideString; virtual; abstract;
    class function GetShortDesc(): WideString; virtual; abstract;
    class function GetAdvDesc(): WideString; virtual; abstract;
    class function GetDevelopers(): WideString; virtual; abstract;
    class function GetSecurity(): Integer; virtual; abstract;
    class function GetSpeed(): Integer; virtual; abstract;
  public
    property Name : WideString read GetName;
    property ID : TGUID read GetGUID;
    property ShortDesc : WideString read GetShortDesc;
    property AdvDesc : WideString read GetAdvDesc;
    property Developers : WideString read GetDevelopers;
    property Security : Integer read GetSecurity;
    property Speed : Integer read GetSpeed;

    procedure WriteInformationToStream(F: TStream); virtual; abstract;
    procedure ReadInformationFromStream(F: TStream); virtual; abstract;

    procedure EnCryptText(const InPut, Password: WideString;
      var Result: WideString); virtual; abstract;
    procedure EnCryptFile(InPut, OutPut: TStream;
      const Password: WideString); virtual; abstract;
    procedure DeCryptText(const InPut, Password: WideString;
      var Result: WideString); virtual; abstract;
    procedure DeCryptFile(InPut, OutPut: TStream;
      const Password: WideString); virtual; abstract;
end;
Unter Delphi 2005 bekomme ich jedoch diese Fehlermeldungen:
Zitat:
[Fehler] uAppCipherClass.pas(30): E2356 Für Eigenschaftszugriff muss ein Instanzenfeld oder eine Instanzenmethode verwendet werden
[Fehler] uAppCipherClass.pas(22): E2065 Ungenügende Forward- oder External-Deklaration: 'TCipher.GetGUID'
Erstere für jede property, letztere für jede Abstrakte Methode.

Was mache ich falsch und wieso ist solch ein Konstrukt nicht mehr in Delphi Win32 in Delphi 2005 erlaubt?

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Spezielle Konstruktion funktioniert in D2005 nicht mehr

  Alt 25. Dez 2004, 16:36
Moin David,

sieht für mich so aus, als akzeptiere D2005 keine Klassenmethoden als Get-/Setmethoden für Eigenschaften.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Spezielle Konstruktion funktioniert in D2005 nicht mehr

  Alt 25. Dez 2004, 16:46
Hi Christian,

ja das erscheint mir auch so . Nur: Wieso sollte es denn nicht mehr gehen?

mfG
mirage228

Edit:
P.S.: Unter Windows.Forms geht es auch nicht.
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#4

Re: Spezielle Konstruktion funktioniert in D2005 nicht mehr

  Alt 25. Dez 2004, 17:37
Eine virtuelle abstrakte Klassen-Methode? Das ist doch ein bischen widersinnig. Auf jeden Fall etwas ueberdesignt.
Entweder hat man Klassenmethoden, dann ist die Property zuviel, oder umgekehrt.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Spezielle Konstruktion funktioniert in D2005 nicht mehr

  Alt 25. Dez 2004, 18:00
Ich denke mal der neue Compiler ist hier etwas strenger.

Evtl. kannst Du vor den Property auch noch das Schlüsselwort class setzen, damit der Compiler weiß das wirklich alles sich auf die Klasse und nicht auf Instanzen bezieht. (Klassen-Member sollten mit D2005 jetzt erlaubt sein).
So ist er überfordert. Ist das Property nun Klassen- oder Instanzabhängig.

Was hat den der alte Compiler gemacht? Wurden die Properties der Klasse zugeodnet (Alle Instanzen hatten den selben Wert) oder den Instanzen (Die class-Angaben wurden ignoriert).
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
mytar

Registriert seit: 30. Mai 2004
Ort: Zermatt
411 Beiträge
 
Delphi 6 Enterprise
 
#6

Re: Spezielle Konstruktion funktioniert in D2005 nicht mehr

  Alt 25. Dez 2004, 18:07
Was erreiche ich mit diesem class vor der Methode?

Beispiel:
class function GetGUID(): TGUID; virtual; abstract; Danke
Francis Obikwelu
greetz
mytar
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Spezielle Konstruktion funktioniert in D2005 nicht mehr

  Alt 25. Dez 2004, 18:09
Das die Methode der Klasse zugeordnet ist und nicht einer Instanz davon.
Du kannst Die Methode anwenden ohne eine Instanz der Klasse zu haben.
Du darfst in einer solchen Methode nicht auf Member von Variablen zugreifen.
Der Konstruktor Create ist eine Klassenmethode.

Delphi-Quellcode:
TMyClass.Create(Owner);
TMyClass.MyClassMethode(...);
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
mytar

Registriert seit: 30. Mai 2004
Ort: Zermatt
411 Beiträge
 
Delphi 6 Enterprise
 
#8

Re: Spezielle Konstruktion funktioniert in D2005 nicht mehr

  Alt 25. Dez 2004, 18:11
Wieso sollte ich eine Klassenmethode aufrufen wollen,
bevor ich sie instanziert habe?


Danke
Francis Obikwelu
greetz
mytar
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Spezielle Konstruktion funktioniert in D2005 nicht mehr

  Alt 25. Dez 2004, 18:16
Zitat von mytar:
Wieso sollte ich eine Klassenmethode aufrufen wollen,
bevor ich sie instanziert habe?
Um z.B. Instanzübergreifende Einstellungen vorzunehmen. Oder die Anzahl der Instanzen der Klasse abzufragen.
Alles was keiner einzelnen Instanz zugeordnet werden kann sondern für alle Instanzen der Klasse gilt/gelten soll.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#10

Re: Spezielle Konstruktion funktioniert in D2005 nicht mehr

  Alt 26. Dez 2004, 08:37
Zitat von Robert Marquardt:
Eine virtuelle abstrakte Klassen-Methode? Das ist doch ein bischen widersinnig. Auf jeden Fall etwas ueberdesignt. Entweder hat man Klassenmethoden, dann ist die Property zuviel, oder umgekehrt.
Ja der Code ist schon etwas älter und es gibt sicher wege, das ganze eleganter und evtl. auch besser zu lösen, aber es geht mir darum, dass der Code unter D7 einwandfrei und korrekt funktioniert hat und in D2005 halt nicht mehr

Zitat von Bernhard Geyer:
Evtl. kannst Du vor den Property auch noch das Schlüsselwort class setzen, damit der Compiler weiß das wirklich alles sich auf die Klasse und nicht auf Instanzen bezieht. (Klassen-Member sollten mit D2005 jetzt erlaubt sein).
Wenn ich "class property" schreibe, erhalte ich folgende Meldung:
Zitat:
[Fehler] uAppCipherClass.pas(30): E2355 Für den Zugriff auf Klasseneigenschaften muss ein Klassenfeld oder eine statische Klassenmethode verwendet werden
Also scheint D2005 für class properties wohl keine virtuellen bzw. virtuell abstrakten Klassenmethoden zuzulassen.

Zitat von Bernhard Geyer:
Ich denke mal der neue Compiler ist hier etwas strenger.
So ist er überfordert. Ist das Property nun Klassen- oder Instanzabhängig.
Was hat den der alte Compiler gemacht? Wurden die Properties der Klasse zugeodnet (Alle Instanzen hatten den selben Wert) oder den Instanzen (Die class-Angaben wurden ignoriert).
Ja, das wird wohl so sein (... oder doch ein "Bug"?), aber wieso hatte D7 das noch richtig gemacht bzw. es akzeptiert (D2005 hat ja für den Win32 Teil "nur" ein veränderten D7 Compiler) und jede Instanz hatte den selben Wert (also die properties waren der Klasse zugeordnet)?

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz