Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a way to predeclare nested classes in C++? [duplicate]

Possible Duplicate:
Forward declaration of nested types/classes in C++

For simple cross-references of classes it is feasable to predeclare the classnames and use it as reference. In this way the representation is a pointer. But in case I want to cross-reference a nested class of both (look at the example below), I will run into trouble, because there seems to be no way to predeclare a nested class.

So my question is: Is there a way to predeclare nested classes so that my example could work?

If not: Is there a common workaround for that, that doesn't uglyfy the code too much?

// 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 { };
};
like image 420
Christoph Meißner Avatar asked Oct 07 '22 20:10

Christoph Meißner


1 Answers

In short, the answer is no.

But you should have looked first for a similar question...

EDIT: a possible workaround might be wrapping both classes in another class, and forward delcaring the nested classes inside the wrapper.

class Wrapper
{
public:

   // Forward declarations
   class FirstNested;
   class SecondNested;

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

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

This way you'll have to implement Wrapper::A and Wrapper::B while still isolating them from whatever namespace you're imlpementing.

like image 190
Eitan T Avatar answered Oct 10 '22 09:10

Eitan T