【问题标题】:How can I resolve interface method and base class method name conflict in C++ Builder?如何解决 C++ Builder 中的接口方法和基类方法名称冲突?
【发布时间】:2011-04-13 23:45:01
【问题描述】:

我有以下抽象基类 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# 的构造,您可以在其中显式实现具有相同定义的接口方法?

谢谢!

【问题讨论】:

    标签: c++ c++builder multiple-inheritance


    【解决方案1】:

    试试类似的东西(从我不能确切地说出来的代码):

    DebugSettingsFrame::TFrame::Update();

    :: 是范围解析运算符。您应该能够准确地指定您正在调用的函数的版本。

    但是,请注意,这是设计可能变得过于复杂的症状。

    【讨论】:

    • 真的吗? C++ 规范有变化吗?我曾经教过 C++,我的一个例子是如何处理从两个类的多重继承,其中每个类都有一个同名的变量。处理它的唯一方法是范围解析运算符。
    • 你没有错,但在这种情况下,问题在于他的Update 版本是一个纯虚函数。这将与不纯的TFrame::Update 冲突。将编辑我的答案以澄清这一点。
    猜你喜欢
    • 2015-12-04
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 2011-05-28
    • 2014-05-20
    • 1970-01-01
    • 2012-08-27
    相关资源
    最近更新 更多