2011-04-13 42 views
0

我有以下的抽象基類,SettingsInterface,我作爲一個接口使用:如何解決C++ Builder中的接口方法和基類方法名稱衝突問題?

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 ::更新()與基類TWinControl'的衝突。 我跺腳了。我怎樣才能解決這個問題,而不需要將我的接口的方法定義Update更改爲其他東西?

編輯 - 後續:

所以C++沒有類似於C#中的構造物,其中可以明確實現具有相同的定義接口的方法呢?

謝謝!

回答

-1

試着這麼做(從代碼我不能確切說):

DebugSettingsFrame :: TFRAME ::更新();

::是範圍解析運算符。您應該能夠精確指定您正在調用的函數的哪個版本。

但是,請注意,這是設計的一個症狀,可能會變得太複雜。

+0

真的嗎? C++規範是否改變了?我曾經教C++,我的例子之一是如何處理從兩個類繼承的乘法,其中每個類都有一個具有相同名稱的變量。解決這個問題的唯一方法是範圍解析運算符。 – 2011-04-14 13:41:05

+0

你對此沒有錯,但在這種情況下,問題在於他的'Update'版本是純虛函數。這會與'TFrame :: Update'衝突,這不是純粹的。將編輯我的答案來澄清這一點。 – 2011-04-14 14:38:19

相關問題