How to write two nested classes extend the other parent class each other

Hello. I tried to convert the following C# code into C++/CLI.


namespace ConsoleApplication
{
class Class1
{
public class NestedClass1 : Class2
{
}

public class NestedClass2 : Class2.NestedClass2
{
}
}

class Class2
{
public class NestedClass1 : Class1
{
}

public class NestedClass2 : Class1.NestedClass1
{
}
}
}


 

At first, I supposed the following code, but it was failed to compile. Anyone know how to write it



namespace ConsoleApplication
{
extern ref class Class1;
extern ref class Class2;
extern ref class Class1::NestedClass1; /* error here */
extern ref class Class1::NestedClass2; /* error here */
extern ref class Class2::NestedClass1; /* error here */
extern ref class Class2::NestedClass2; /* error here */

public ref class Class1
{
public:
ref class NestedClass1 : Class2
{
};

ref class NestedClass2 : Class2::NestedClass2
{
};
};

public ref class Class2
{
public:
ref class NestedClass1 : Class1
{
};

ref class NestedClass2 : Class1::NestedClass1
{
};
};
}


 



Answer this question

How to write two nested classes extend the other parent class each other

  • Raffaele Rialdi

    Interesting.

    class a
    class b
    class c : public a
       class c0 : public b
    class d : public b
       class d0 : public a

    different approach more extensible

    Kuphryn


  • Charles Lee

    You can't forward declare nested classes in C++ so you have to define these classes as follows:

    namespace ConsoleApplication {
    public ref class Class1 {
    public:
    ref class NestedClass1;
    ref class NestedClass2;
    };

    public ref class Class2 {
    public:
    ref class NestedClass1;
    ref class NestedClass2;
    };

    ref class Class1::NestedClass1 : Class2 {
    };

    ref class Class2::NestedClass1 : Class1 {
    };

    ref class Class1::NestedClass2 : Class2::NestedClass1 {
    };

    ref class Class2::NestedClass2 : Class1::NestedClass1 {
    };
    }



  • Student_I

    Unfortunately as you can't forward declare nested classes in C++ there is no way to break the cyclic connection between these declarations.

  • Chris Foley

    Thank you Jonathan. I have to learn C++ more. I have the other related question.

    What is the equivalent C++/CLI code for the following C# code.



    namespace ConsoleApplication
    {
    class Class1
    {
    public class NestedClass1 : Class2
    {
    }
    public void Method(Class2.NestedClass1 p)
    {
    }
    }
    class Class2
    {
    public class NestedClass1 : Class1
    {
    }
    public void Method(Class1.NestedClass1 p)
    {
    }
    }
    }

    I have no idea about it.


  • How to write two nested classes extend the other parent class each other