我有一个由嵌套枚举创建的循环依赖。
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
}
答案 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;
}