Search code examples
c++classsyntax

Cannot forward-declare a class in a class


I am not new to C++ but I still can't figure the syntax out, the problem is that it's a class in another class. I only found answers for normal forward declaration. Please don't take my code perfection too seriously here.

I tried following but nothing worked:

class MyClass {
public:
    class InnerClass
    {
    public:
        void boo()
        {
            foo(*this); // error: foo() is not known
        }
    };
};

void foo(MyClass::InnerClass& ref)
{
}

or

class MyClass;
class MyClass::InnerClass; // error: incomplete type is not allowed

void foo(MyClass::InnerClass& ref)
{
}

class MyClass
{
public:
    class InnerClass
    {
    public:
        void boo()
        {
            foo(*this);
        }
    };
};

or

class MyClass
{
public:
    class InnerClass;
};

void foo(MyClass::InnerClass& ref)
{
}

class MyClass // error: redefinition of 'MyClass'
{
public:
    class InnerClass
    {
    public:
        void boo()
        {
            foo(*this);
        }
    };
};

Solution

  • Define MyClass::InnerClass:boo() after foo is defined.

    class MyClass {
    public:
        class InnerClass
        {
        public:
            void boo();
        };
    };
    
    void foo(MyClass::InnerClass& ref)
    {
    }
    
    void MyClass::InnerClass::boo() {
        foo(*this); 
    }