gpt4 book ai didi

c++ - 相互引用类产生 "incomplete type"错误

转载 作者:太空狗 更新时间:2023-10-29 20:18:27 25 4
gpt4 key购买 nike

我遇到这样一种情况,A 引用了 B 中定义的类 C,而 C 有类 B 的实例。

当我尝试编译下面的代码时,我得到“field a has incomplete type”。我假设这是因为编译器不知道应该为 A 的实例分配多少内存。

class A;

class B {
public:
class C {
A a;
};
};

class A {
A(const B::C& _c)
: c(_c)
{}
const B::C& c;
};

但是当我尝试编译它时,我得到“C in class B does not name a type”:

class B;
class B::C;

class A {
A(const B::C& _c)
: c(_c)
{}
const B::C& c;
};


class B {
public:
class C {
A a;
};
};

我怎样才能让编译器相信 B::C 是一个真实的类型?

最佳答案

作为一个绝对的猜测,我注意到有一种排列你还没有尝试过:

class B {
public:
class C; // Forward declaration
};

class A {
A(const B::C& _c)
: c(_c)
{}
const B::C& c;
};

class B::C {
A a;
C() : a(*this) {} // Thanks Nim for pointing this out!
};

这很可能是非法的,但我认为值得一试。如果它不起作用,那么我看不到任何解决问题的方法。

关于c++ - 相互引用类产生 "incomplete type"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3978900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com