我有一個類Listener與兩個子類,TCP和域。我正在嘗試創建一個unique_ptr,它將保存TCP或Domain的實例,具體取決於業務邏輯。出於某種原因,我不明白,這將導致一個錯誤:cannot initialize a parameter of type xxx::Listener *with an rvalue of type xxx::Domain *
爲什麼我無法創建這個unique_ptr?
這裏是我的代碼:
unique_ptr<Listener> Listener::create(const Parameters& parameters) {
unique_ptr<Listener> listener;
if (parameters.socket.empty()) {
listener.reset(new TCP(parameters));
} else {
listener.reset(new Domain(parameters));
}
return listener;
}
更新
域和TCP確實偵聽的孩子。項目中沒有其他同名的類。還有什麼我可以做進一步調試?
你100%肯定'Domain'是'Listener'的子類嗎? –
「還有什麼我可以做的進一步調試」1 /創建一個MVCE,2 /仔細查看錯誤信息,並失敗3/post 1和2.如果你看我的答案中的第二個MVCE ,顯然你得到的錯誤是編譯器明確地告訴你「xxx :: Domain」不是從「xxx :: Listener」公開派生的。 – kfsone
這就是爲什麼你應該發佈**測試用例**。經過六年多的時間,你現在應該知道這一點。 –