2011-09-14 48 views
1

我有一個類只操作shared_ptr繼承層次結構(很簡單,有幾個類,說A, B, C等繼承從一個類Base)。由於我不需要操縱A,B,C ...本身的實例,它們只是前向聲明的。但是,當我試圖將shared_ptr<A>傳遞給採用shared_ptr<Base>的方法時,編譯器會窒息,因爲編譯器不知道A是從Base繼承的。除了static_pointer_cast#include A類的標題,還有其他方法嗎?如果不是,你會選擇哪一個?正向聲明的類層次結構shared_ptr之間的轉換

編輯:添加一些代碼

// in some file: (Base.h) 
class Base 
{ 
    /*code*/ 
} 

// in another file (A.h) 
class A : public Base 
{ 
} 

// in my file (impl.cpp) 
class A; // forward declaration  

void Dummy() 
{ 
    std::shared_ptr<A> myPtr; 

    // we have somewhere: void sillyFunction(shared_ptr<Base> foo) 
    sillyFunction(myPtr); // does not compile, as no conversion is found. 
} 
+1

一個代碼示例會比文字更好地展示您的問題。 –

+0

將實現從聲明中分離出來,併爲實現提供派生類的完整聲明。這應該工作。發佈更多細節,如果你仍然有問題。 –

+0

聲明與實現分開。事情是,我似乎只有一個名稱依賴關係,我並不想完全依賴類A,B,C ...... – wendazhou

回答

1

是否有任何其他的方式比任何static_pointer_castor A級#includethe頭?

號其實#include是做正確的唯一途徑(無論是static_pointer_cast不會工作或調用不確定的行爲)。您不能在不完整的子類和超類之間投射普通的指針。