【问题标题】:Circular Includes with inner classes带有内部类的循环包含
【发布时间】:2020-09-11 04:45:34
【问题描述】:

我遇到了一个围绕循环包含问题的问题,尤其是我目前正在处理的问题。我在自己的文件中有两个类/结构。 A 类有一个内部类,B 类有一个该类型的成员。我需要在 A 中使用 B 的实例,如果它们在同一个文件中被删除就可以了,但因为它们不是我如何才能使这项工作?

啊.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 必须在 B 之前定义,B 必须在 A.. 之前定义。

标签: c++ include inner-classes


【解决方案1】:

啊哈:

#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 移动到另一个类并添加朋友关系(您可以添加双向,使用与上面相同的技巧与结构声明)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-14
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多