c++ 不能在类中前向声明类

9cbw7uwe  于 2023-05-02  发布在  其他
关注(0)|答案(2)|浏览(152)

我不是C++的新手,但我仍然不能弄清楚语法,问题是它是另一个类中的一个类。我只找到了正常转发声明的答案**。请不要把我的代码完美太当回事。
我试着跟踪,但没有任何效果:

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

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

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);
        }
    };
};

class MyClass
{
public:
    class InnerClass;
};

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

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

cxfofazt1#

一个简单的方法是在内部类定义之前声明函数,如

class MyClass {
public:
    class InnerClass;
};

void foo(MyClass::InnerClass& ref);

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

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

ttcibm8c2#

定义foo后定义MyClass::InnerClass:boo()

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

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

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

相关问题