Ableitungsproblem: Konflikt mit Basisklasse (indy)



  • Hallo,

    Ich versuche eine Klasse zu schreiben, die von TIdTCPClient abgeleitet werden soll.

    class TMyTCPClient : TIdTCPClient
    {
      public:
        __fastcall TMyTCPClient(Classes::TComponent* AOwner);
    };
    
    _fastcall TMyTCPClient::TMyTCPClient(Classes::TComponent* AOwner) : TIdTCPClient(/*AOwner*/)
    {
    
    }
    

    Bekomme dabei Fehlermeldung E2113 Virtuelle Funktion '_fastcall TMyTCPClient::TMyTCPClient(TComponent *)' verursacht Konflikte mit der Basisklasse 'TIdTCPClient'

    Kann mir da einer sagen warum? Ich will nur die Indy Tools nutzen ohne dabei ein Formular nutzen zu müssen.

    (Auszug aus der Oberklasse:)

    class DELPHICLASS TIdTCPClient;
    class PASCALIMPLEMENTATION TIdTCPClient : public Idtcpconnection::TIdTCPConnection 
    {
    	typedef Idtcpconnection::TIdTCPConnection inherited;
    
    [...]
    
    public:
    	__fastcall virtual TIdTCPClient(Classes::TComponent* AOwner);
    	__fastcall virtual ~TIdTCPClient(void);
    	[...]	
    };
    

    DANKE



  • Ein virtueller Konstruktor? Das gibt's echt? 😮

    Ansonsten dürfte der Compiler ein Problem damit haben, daß du in der Initialisierungsliste den Parameter auskommentiert hast - und er nun vergeblich den Default-Ctor der Basisklasse sucht.



  • ups... also die Auskommentierung gehört da nicht hin!
    Also das AOwner ist schon da drin!

    Der Fehler entsteht aber auch schon viel früher: Und zwar in der 5. Zeile, also hier:

    __fastcall TMyTCPClient(Classes::TComponent* AOwner);
    

    Und die Oberklasse ist wie gesagt der IndyClient, also hab ich nicht geschrieben. Und dort gibt es auch keinen Default-C'tor. Oder habe ich da was falsch verstanden??? 😕



  • Hallo

    Ich will nur die Indy Tools nutzen ohne dabei ein Formular nutzen zu müssen.

    Und was hat das mit deinen Ableitungen zu tun? Selbstverständlich kann man auch die reine Indy-Klasse ohne Form benutzen, du must sie nur selber erstellen und als Owner NULL übergeben. Und natürlich nach Gebrauch wieder löschen.

    bis bald
    akari



  • CStoll schrieb:

    Ein virtueller Konstruktor? Das gibt's echt? 😮

    Ich wundere mich immer noch darüber, daß die Zeile __fastcall virtual TIdTCPClient(Classes::TComponent* AOwner); durch den Compiler gekommen ist. Hat der BCB eine Erweiterung des C++-Standards erfunden, bei der virtuelle Konstruktoren erlaubt sind? Und wenn ja, wie sind diese umgesetzt?



  • Und was hat das mit deinen Ableitungen zu tun? Selbstverständlich kann man auch die reine Indy-Klasse ohne Form benutzen, du must sie nur selber erstellen und als Owner NULL übergeben. Und natürlich nach Gebrauch wieder löschen.

    *arg* du hast recht... bin da noch nicht so firm. DANKE! Problem gelöst.



  • CStoll schrieb:

    Ich wundere mich immer noch darüber, daß die Zeile __fastcall virtual TIdTCPClient(Classes::TComponent* AOwner); durch den Compiler gekommen ist. Hat der BCB eine Erweiterung des C++-Standards erfunden, bei der virtuelle Konstruktoren erlaubt sind? Und wenn ja, wie sind diese umgesetzt?

    Nicht das ich in diesem Thema eine Leuchte wäre, aber es gibt tatsächlich Klassen, die einen virtuellen Konstruktor haben. TStrings zB. Allerdings kann man keine Objekte dieser Klassen erstellen. Sie dienen ausschließlich als abstrakte Basisklassen.


Anmelden zum Antworten