Вопрос по поводу наследования в wxWidgets - PullRequest
0 голосов
/ 29 апреля 2010

В настоящее время я пытаюсь написать свой собственный wxObject и хотел бы, чтобы класс основывался на классе wxTextCtrl.

На данный момент вот что у меня есть:

class CommandTextCtrl : public wxTextCtrl {
    public:
        void OnKey(wxKeyEvent& event);
    private:
        DECLARE_EVENT_TABLE()
};

Позже у меня есть эта строка кода, которая не похожа на:

CommandTextCtrl *ctrl = new CommandTextCtrl(panel, wxID_ANY, *placeholder, *origin, *size);

... и когда я пытаюсь скомпилировать программу, я получаю эту ошибку:

error: no matching function for call to ‘CommandTextCtrl::CommandTextCtrl(wxPanel*&, <anonymous enum>, const wxString&, const wxPoint&, const wxSize&)’

Кажется, он не наследует метод конструктора с помощью wxTextCtrl. Кто-нибудь знает, почему он не наследует конструктор?

Заранее спасибо за любую помощь!

1 Ответ

5 голосов
/ 29 апреля 2010

C ++ не наследует конструкторы (вы можете подумать о Python, который делает ;-). Класс без явно объявленных ctors, как ваш CommandTextCtrl в C ++, имеет только стандартные и копируемые ctors, неявно предоставляемые правилами C ++.

Итак, вам нужно явно определить ctor с вашей желаемой сигнатурой, которая в основном «возвращается» к базовому классу - с синтаксисом CommandTextCtrl(...): wxTextCtrl(...) {}, конечно.

...