Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Fehlermeldung Methode Create verbirgt virtuelle Methode
Tranx - So 30.10.11 19:56
Titel: Fehlermeldung Methode Create verbirgt virtuelle Methode
Ich habe da mal eine Frage:
Was soll diese Fehlermeldung?
Angeblich wird die virtuelle Methode des Basistyps einer Klasse verborgen. Ich habe Construktoren geschrieben, nach dem Typ
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| Txx = class(TBitBtn) AOwner: TWinControl; fLinkList: TLabeledLinkList; fLinkLabel: TLabel; : : private : : protected public constructor Create(AOwner: TWinControl); destructor destroy; override; : : published end; |
Innerhalb der Konstruktoren habe ich als ersten Befehl geschrieben:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| constructor Txx.Create(AOwner: TWinControl); begin inherited Create(AOwner); fLinkList := Tyy(AOwner).LabeledLinkList; fLinkLabel := TLabel.Create(AOwner); : : end; |
Frage mich nun, was da verborgen sein soll, da ich in der Createprozedur doch den Vorgänger-Konstruktor aufrufe. Und wenn es doch ein Fehler sein soll, welche Auswirkung hätte der? Bisher stelle ich kein Fehlverhalten fest. Oder liegt das an der virtuellen Prozedur Create des Basistyps, welche ja wohl kaum etwas tut. Oder sehe ich das verkehrt?
Moderiert von
Narses: Topic aus VCL (Visual Component Library) verschoben am So 30.10.2011 um 22:19
bummi - So 30.10.11 23:23
Delphi-Quelltext
1:
| constructor Create(AOwner: TComponent); override; |
Moderiert von
Martok: Delphi-Tags hinzugefügt
Tranx - Mo 31.10.11 13:30
Bummi, habe die Create-Prozeduren nach Deinem Schema umgeschrieben.
Es tauchen jedoch zwei Fehlermeldungen des Compilers auf:
1. Eine statische Methode kann nicht überschrieben werden (Anscheinend ist der Construktor Create der Vorgänger statisch)
2. Inkompatible Typen TComponent und TWinControl ( Die Variable AOwner kann wohl nur vom Typ TWincontrol sein).
Also muss ich wohl alles so lassen. Aber danke für den Hinweis.
bummi - Mo 31.10.11 13:45
Die älteste Delphiversion die ich noch am laufen habe ist D7, dort lande ich bei STRG+Klick auf TBitBtn Deklaration an der Stelle
TBitBtn = class(TButton)
mit
public
constructor Create(AOwner: TComponent); override;
Tranx - Mo 31.10.11 15:03
Ah, daher der Unterschied.
Ich hoffe bloß, dass neuere Delphi-Versionen da eine einfachere Übertragung ermöglicht. Es macht ja wenig Sinn, den kompletten Code nach möglichen Komponentenwechseln abzusuchen, bis dann mal ein lauffähiges Programm steht. Jetzt verstehe ich auch, wieso das damals mit Delphi 8 nicht funktionierte.
bummi - Mo 31.10.11 15:09
mhhhh, wo landest Du denn und was steht bei Dir dort wo Du landest .....
Tranx - Mo 31.10.11 16:04
Ich hatte vor ewigen Zeiten mal versucht, den Code, den ich in Delphi 5 geschrieben habe, auf Deplhi 8 zu übertragen. Doch da kamen so viel Fehlermeldungen bzw. fehlende Komponenten (obwohl ich damals gar keine eigenen Komponenten geschrieben hatte), dass ich den Versuch aufgab. Das hätte soviel Zeit beansprucht, bis das Ganze gelaufen wäre, dass ich keine Lust dazu hatte. Mit Delphi XE gings (Als Testversion, allerdings Architecture-Version) überraschend gut. Aber leider fehlt mir die Knete, diese Version mir zuzulegen.
Vielleicht kommt das ja mal in Frage. Aber jetzt eben nicht.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!