2012-05-13 71 views
5

可能重複:
Forward declaration of nested types/classes in C++有沒有辦法在C++中預先聲明嵌套類?

對於類簡單的交叉引用這是feasable到預先聲明的類名,並使用它作爲參考。這樣表示就是一個指針。但是如果我想交叉引用兩者的嵌套類(請看下面的例子),我會遇到麻煩,因爲似乎沒有辦法預先聲明嵌套類。

所以我的問題是:有沒有辦法預先聲明嵌套類,以便我的例子可以工作?

如果沒有:是否有一個共同的解決方法,那不會太醜陋的代碼?

// Need to predeclare it to use it inside 'First' 
class Second; 
class Second::Nested; // Wrong 

// Definition for my 'First' class 
class First 
{ 
public: 
    Second::Nested* sested; // I need to use the nested class of the 'Second' class. 
          // Therefore I need to predeclare the nested class. 
    class Nested { }; 
}; 

// Definition for my 'Second' class 
class Second 
{ 
public: 
    First::Nested* fested; // I need to use the nested class of the 'First' class. 
          // This is okay. 
    class Nested { }; 
}; 
+0

好的 - 如果我要查找「聲明」,我會找到這個答案。 (這是不可能的。)就是這樣。謝謝。但是現在我想到一個解決方法。 Unnesting與我的名字空間的另一個'class Nested'類衝突。重命名混淆了界面的用戶。 –

回答

4

總之,答案是否定的。

但你應該先尋找一個similar question ...

編輯:可能的解決辦法可能會在其他的類包裝的兩個類,並轉發delcaring包裝內的嵌套類。

class Wrapper 
{ 
public: 

    // Forward declarations 
    class FirstNested; 
    class SecondNested; 

    // First class 
    class First 
    { 
    public: 
     SecondNested* sested; 
    }; 

    // Second class 
    class Second 
    { 
    public: 
     FirstNested* fested; 
    }; 
}; 

這種方式,你就必須實現Wrapper::AWrapper::B,同時還從任何命名空間你imlpementing隔離。

+0

我看過這個問題,但沒有解決辦法,但無法解決。我相信肯定會有另外一個更好的解決方案。就像一個模式,不會干擾類的關係。 –

+0

上面的例子看起來沒問題。在這種情況下,我接受它。此外,我仍然需要找到另一種解決方案,因爲我需要多次進行這樣的跨接,所以我不能將所有的類都放入包裝類中。考慮嵌套類中的嵌套類,這仍然不是解決方案。 –

+0

您必須爲這種情況創建共享類,沒有其他選擇(或重新考慮您的設計)。 –

相關問題