类中类的前向声明问题[重复]

问题描述 投票:0回答:2

我不是 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);
        }
    };
};
c++ class syntax
2个回答
1
投票

在定义

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

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

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

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

1
投票

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

class MyClass {
public:
    class InnerClass;
};

void foo(MyClass::InnerClass& ref);

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

void foo(MyClass::InnerClass& ref)
{
}
© www.soinside.com 2019 - 2024. All rights reserved.