2010-03-30 103 views
3

我有一個類A,它在其構造函數中引用了B。我可以將子類傳遞給父類的引用嗎?

class A { 
    public: 
    A(B& b); 
    } 

而且我有一個類SUBB這是一個子類B的:

class SubB : public B { 
    //omitted... 
} 

在我的代碼,我創建了一個SUBB,並把它傳遞給答:

SubB subB; 
    A a(subB); 

但我得到這個編譯錯誤:

錯誤:'B'是'SubB'的不可訪問的基地

我可以將SubB的引用作爲B傳遞嗎?

謝謝。

+3

「B」是「SubB」的唯一基礎嗎? (即你是否意外地使':public X,Y'錯誤?) – Amber 2010-03-30 02:17:33

+0

你正在使用哪種編譯器?這些都在相同的C++文件? – Uri 2010-03-30 02:17:40

+0

根據您提供的信息,代碼看起來很好。我認爲還有更多。請分享完整的示例代碼。 – 2010-03-30 02:20:00

回答

1

雖然聲明class B缺失,但發佈的代碼看起來正確。發佈更完整的代碼片段 - 您的問題很可能是錯誤地包含文件和類聲明。

+0

謝謝。這是我的問題的根源。我現在解決了。 – michael 2010-03-30 02:41:16

0

是的,將派生類實例傳遞給接受基類引用的函數是可以的。

雖然您的示例爲我編譯,但看起來不會產生該錯誤 - 「無法訪問的基類」通常指通過受保護或私有繼承而非公共繼承進行擴展的內容。你能發佈一個更完整的例子嗎?

相關問題