C ++由嵌套的枚举类引起的循环依赖

时间:2015-12-21 17:06:42

标签: c++ class enums nested circular-dependency

我有一个由嵌套枚举创建的循环依赖。

class A
{
    enum class A_enum {};

    void method_which_uses_class_B() {}
}

class B
{
    void method_which_uses_A_enum() {}
}

这让您了解整体结构。

具体来说,我有以这种方式定义的枚举类:

... file containing class A

class A
{
    enum class A_enum
    {
        ITEM_A, ITEM_B
    };

    // then the rest of A goes here
}

// in my main code file

#include "class B file"
#include "class A file"

... code

因此,解决方案是将枚举类从class A中移出,并按正确的顺序放置代码/文件/包含以防止出现此问题。

但是为了我的目的,将枚举类嵌套在class A中是相当不错的。有没有一种方法可以预先确定是否会有class A以及该类中的枚举是什么?我尝试了下面这个,但它没有用,因为我两次定义了这个类:

class A;

enum class A::A_enum
{
    contenta, contentb
};

class A
{
    enum class A_enum {...};
}

然后

class A
{
    // the rest of it
    // obviously doesn't work because already defined class A
}

2 个答案:

答案 0 :(得分:2)

处理这种情况的唯一方法是在A::method_which_uses_class_B()定义后实施class B

class A
{
    enum class A_enum {};

    void method_which_uses_class_B();
};

class B
{
    void method_which_uses_A_enum() {}
};

void A::method_which_uses_class_B()
{
}

答案 1 :(得分:1)

前向声明可以解决此问题:

class A;
class B;

class A {
    public:
        enum class A_enum {};
        void method_which_uses_class_B();
};

class B {
    public:
        void method_which_uses_A_enum();
};

void A::method_which_uses_class_B() {
    A::A_enum instance_of_a_enum;
    A instance_of_a;
    B instance_of_b;
}

void B::method_which_uses_A_enum() {
    A::A_enum instance_of_a_enum;
    A instance_of_a;
    B instance_of_b;
}