内部类的通函包括

问题描述

我遇到了一个问题,尤其是我当前正在处理的问题中。我在自己的文件中有两个类/结构。 A类具有内部类,而B类具有该类型的成员。我需要在A内使用B的实例,如果将它们实例化在同一文件中是可以的,但是由于它们不是我该如何进行这项工作?

A.h

#pragma once

#include "B.h"

class A
{
public:
    class Inner{};
    
    B getNewB() { return B{}; }
};

B.h

#pragma once

#include "A.h"

struct B
{
    A::Inner inner;
};

解决方法

A.h:

#pragma once

#include "innerA.h"

struct B;

class A
{
public:
    B getNewB();

    friend class InnerA;
};

A.cpp

#include "A.h"
#include "B.h"

B A::getNewB() { return B{}; }

B.h

#pragma once

#include "innerA.h"

struct B
{
    InnerA inner;
};

B.cpp

#include "B.h"

InnerA.h

#pragma once

class InnerA
{
};

InnerA.cpp

#include "innerA.h"

我将A::Inner移到了另一个类并添加了朋友关系(您可以添加双向,使用与上面的I相同的技巧和struct声明)