1
從模板的多個實例繼承時,我遇到了問題。C++多繼承 - 帶模板的鑽石
我的類Bridge試圖從BridgeTemplate的兩個實例繼承,所以當我們嘗試調用BridgeTemplate的'set'函數時,編譯器會產生一個錯誤(「ambiguous ...」)。但是,如果Bridge僅從1個實例繼承,那麼一切正常。
下面是來自模板和類橋的一段代碼。在此先感謝
template <class DataType, class DataWriter>
class BridgeTemplate : public BridgeGeneric
{
public:
void set(DataType a, DataWriter b)
{
std::cout << "a: " << a << "; b: " << b << std::endl;
}
...
};
class Bridge : public virtual BridgeTemplate<int,float>, public virtual BridgeTemplate<float,int>
{
...
}
所以,如果你做你在做什麼,你會得到一個編譯器錯誤。閱讀確切的消息或至少在這裏發佈呢? http://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – Samuel
嗨,歡迎來到Stack Overflow!當詢問編譯器錯誤時,請始終包含完整的錯誤文本,並且還包含重現錯誤的代碼(最好是[SSCCE](http://sscce.org/))。 – Angew
注意:你在錯誤的地方有虛擬的地方,它不能再做任何好事。如果你想'BridgeGeneric'只出現一次,你必須從虛擬中派生出來。我也懷疑你是因爲重載解析模糊而得到錯誤的,如果沒有涉及繼承的話會是相同的。但這就是爲什麼我們需要複製代碼來說明。 – Angew