Komponente erstellen



  • Ich möchte gern eine große Komponente erstellen, darin sind zwei erweiterte TSpeedButton. Ich habe über meien TPanel Klasse die neue TSpeedButton Klasse definiert udn erweitert. Gekürzt schaut das so aus:

    class TASpeedButton : public TSpeedButton
    {
    public:
    	__fastcall TASpeedButton(TComponent* Owner);
    };
    
    class TAPanel : public TCustomPanel
    {
    protected:
    	TASpeedButton *FSpeedButton1;
    	TASpeedButton *FSpeedButton2;
    };
    
    [ILINK32 Fehler] Error: Nicht auflösbares externes 'TASpeedButton::' referenziert von *.OBJ
    

    Wieso kennt er denn TASpeedButton nicht? 😞



  • Ist TSpeedButton etwas besonderes?

    Wieso funktioniert dies

    class TMyEdit: public TEdit
    {
    __published:
    private:
    public:
    	__fastcall TASpeedButtonEx(TComponent* Owner);
    };
    

    Aber das nicht?

    class TMySpeedButton : public TSpeedButton
    { // << [BCC32 Fehler]: E2303 Typname erwartet
    __published:
    private:
    public:
    	__fastcall TASpeedButtonEx(TComponent* Owner);
    };
    


  • Hallo

    Vermutlich weil der Header von TEdit bereits im normalen VCL-Projekt überall included wird, der von TSpeedButton aber nicht. Da du TSpeedButton außerhalb des OI einsetzt, must du den Header manuell includen. Welcher das ist steht in der BCB-Hilfe zu TSpeedButton drin.

    bis bald
    akari



  • Danke für den Hinweis. Ich sehe schon den Wald vor Bäumen nicht.
    Ich möchte ein TSpeedButton erweitern und eine ImageList dazu geben.

    class TASpeedButton : public TSpeedButton
    {
    private:
    	Imglist::TCustomImageList* FImages;
    	int FImageIndex;
    	void __fastcall SetImageIndex(const int Value);
    	void __fastcall SetImages(Imglist::TCustomImageList* Value);
    __published:
    	__property int ImageIndex = {read=FImageIndex, write=SetImageIndex, default=-1};
    	__property Imglist::TCustomImageList* Images = {read=FImages, write=SetImages};
    public:
    	__fastcall TASpeedButton(TComponent* Owner);
    };
    

    und diesen TASpeedButton in eine andere eigene Komponenten-Klasse benutzen.
    Am Ende des Compiler Vorgangs sagt er jedoch:

    [ILINK32 Fehler] Error: Nicht auflösbares externes 'TASpeedButton::' referenziert von *.OBJ
    [ILINK32 Fehler] Error: Nicht auflösbares externes '__fastcall TASpeedButton::TASpeedButton(Classes::TComponent *)' referenziert von *.OBJ
    

    Das Problem erzeugt diese Zeile

    FPanel = new TPanel ( this );
    FSpeedButton1 = new TASpeedButton ( FPanel ); // << Error
    FSpeedButton1->Parent = FPanel;
    

    Habe ich den Konstruktur falsch?



  • Hallo

    Die Fehlermeldung sagt nur, das der Linker nicht die Implementation des Konstruktors findet. Da du hier im Forum aber nur die Deklaration zeigst (die soweit in Ordnung ist), können wir hier nichts weiter dazu sagen, außer : Hast du den Konstruktor korrekt in einer .cpp-Datei implementiert, und ist diese Datei auch korrekt ins Projekt eingebunden?

    bis bald
    akari


Anmelden zum Antworten