[CG2009] E2113 Virtual function conflicts.. Nowy komponent

0

Witam,

tworzę nowy komponent dziedziczący po TPanel:

class PACKAGE TXX : private TPanel{

 private:
 protected:
 public:

	using TPanel::Handle;

	//----------------------------------------------
	__fastcall virtual TXX(Classes::TComponent* Owner);
	__fastcall ~TXX();
	//----------------------------------------------

 __published:
};

Kod w postaci jw daje błąd:

[BCC32 Error] txx.h(57): E2113 Virtual function '_fastcall TXX::TXX(TComponent *)' conflicts with base class 'TPanel'

jeśli zmienię dziedziczenie na public to kompiluje się ok. Ja jednak chcę odziedziczyć jako private.
Dodanie DYNAMIC przed __fastcall nic nie daje, pokazuje że nie allowed here..

Czego nie wiem?

0

Dlaczego dziedziczysz prywatnie? Przecież TPanel to nie tylko sama kontrolka, ale także inne klasy, niezbędne do poprawnej integracji z VCL-em (chociażby TObject czy TComponent).

0

Chcę udostępnić tylko:
Handle, Anchors, Alignment

Dziedziczenie prywatne szkodzi w czymś?

0

Szkodzi w tym, o czym pisałem. Zwróć uwagę, że TPanel dziedziczy po innych klasach, między innymi po TObject i TComponent. Dziedzicząc prywatnie, te klasy nie są widoczne na zewnątrz, nie są częścią publicznego interfejsu, są tylko na użytek wewnętrzny. I teraz, jeśli będziesz chciał wrzucić na swój panel np. buttona, to co podasz mu w konstruktorze jako owner'a? Dochodzą do tego jeszcze inne mechanizmy VCL-a, które wymagają dostępu do wspomnianych klas.

0

niezłe cudo: konstruktor wirtualny :)

0

I teraz, jeśli będziesz chciał wrzucić na swój panel np. buttona, to co podasz mu w konstruktorze jako owner'a?

No właśnie z założenia nie ma być nic na niego dodawane oprócz tego co dodam sam.

Hmm, no nic, niech pozostanie public. Odpuszczam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1