Как я могу разрешить интерфейсный метод и конфликт имени метода базового класса в C ++ Builder? - PullRequest
0 голосов
/ 14 апреля 2011

У меня есть следующий абстрактный базовый класс, SettingsInterface, который я использую в качестве интерфейса:

class SettingsInterface
{
public:
    virtual void Refresh()      = 0;
    virtual void Update()       = 0;
    virtual void OnConnect()    = 0;
    virtual void OnDisconnect() = 0;
};

Я пытаюсь реализовать этот интерфейс в моем классе ниже, который наследуется от TFrame.TFrame наследует от другого класса, который также имеет виртуальный метод с именем Update.

class DebugSettingsFrame : public TFrame, public SettingsInterface
{
      //a bunch of IDE-managed components - left out for brevity
public:
     virtual void Refresh();
     virtual void Update();
     virtual void OnConnect();
     virtual void OnDisconnect();    
};

Когда я компилирую это, я получаю сообщение об ошибке виртуальной функции DebugSettingsFrame :: Update () конфликтует с базовым классом TWinControl.Я растоптал это.Как я могу решить эту проблему, не меняя определение метода моего интерфейса Update на что-то еще?

Редактировать - продолжение:

Так что в C ++ нет конструкциипохож на C #, где вы можете явно реализовать методы интерфейса, которые имеют такое же определение?

Спасибо!

1 Ответ

0 голосов
/ 14 апреля 2011

Попробуйте что-то вроде (из кода, который я не могу точно сказать):

DebugSettingsFrame :: TFrame :: Update ();

:: - оператор разрешения области.Вы должны быть в состоянии точно указать, какую версию функции вы вызываете.

Однако учтите, что это признак дизайна, который может стать слишком сложным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...