2012-03-22 91 views
0

我已經得到了現在的問題是這樣的設置:不能使用父類中嵌套類 - 即使嵌套類的定義之後

template<typename T> class Parent { 
    struct Nested; 
    std::unique_ptr<Nested> ptr; 
public: 
    // stuff 
    ~Parent(); 
}; 
template<typename T> struct Parent<T>::Nested { 
    Parent<T> p; 
    // stuff 
}; 

的Visual Studio給我一個錯誤的Nested結構正在使用不完整的類型Parent - 即使之後的定義爲Parent類已完成。

我該如何解決這個問題?

編輯:在情況下,它並不明顯,我已經使用直到Nested類被定義爲允許unique_ptr到一個不完整類型的延遲析構函數定義。此外,它絕對與此無關,因爲錯誤不是Nested不完整 - 而是Nested包含Parent類型的成員,該成員不完整。另外,如果我通過使用std::function<void(Nodes*)>明確地刪除刪除器,則問題沒有解決。

+0

此代碼爲MSVS2010編譯(在頂部添加'#include '後) – Attila 2012-03-22 02:34:33

+0

它不適合我。 – Jagannath 2012-03-22 02:38:00

+0

**我的壞**我有**錯誤**投票關閉作爲一個確切的副本,它是**不**。不要投票結束。 – 2012-03-22 03:25:39

回答

1

問題是更多與unique_ptr而不是與類。將其更改爲shared_ptr或正常的原始指針,並且代碼正常工作。

請從以下鏈接找到Stackoverflow。

Does std::unique_ptr requires to know the full T definition?

UPDATE
按照上面的鏈接,該代碼與unique_ptr如果家長沒有模板。

+0

'shared_ptr'和'unique_ptr'提供了不同類型的功能,如果它們可以隨機替換,它們不會以單獨的類型存在嗎? – 2012-03-22 02:43:25

+0

是的,我同意。但是,如果您想將unique_ptr用於尚未具有完整定義的類型,則會出現此問題。 – Jagannath 2012-03-22 02:46:53

+0

:-)只是說。具有諷刺意味的是,提出這個問題的人爲我在鏈接中提供的答案提了2分。 http://stackoverflow.com/a/6088400/124797 – Jagannath 2012-03-22 02:49:02