2012-05-13 86 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

您必须为这种情况创建共享类,没有其他选择(或重新考虑您的设计)。 –

相关问题