我知道这是不可能的
class foo{
foo bar;
};
因为编译器不知道要为foo
准备多少内存。
但是请考虑:
class A{
B::C* foo;
};
class B{
class C{
};
};
无论 C 的定义如何,编译器都能准确知道 A 的大小似乎很合理。那为什么这不可能呢? (标准是否明确禁止这样做?为了什么?)
我有一个非常粗略的方法来绕过将 foo
视为 uintptr_t
的约束,然后 reinterpret_cast
将其返回到 C
,这只是为了表明我真的没有得到(客观)原因,而且我知道如果没有正当理由使用它是一个非常非常糟糕的做法。
最后被标准禁止了。
最佳答案
接下来是一大挑战:
class other {};
namespace N {
class foo {
other* p;
};
class other {};
}
应该考虑哪个other*
?编译器的工作量太大。虽然我们可以通过 ::other
或 N::other
来明确,但在上述情况下仍然会造成混淆。
关于c++ - 为什么一个类不能在没有前向声明的情况下拥有指向另一个类实例的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38625886/