私は、コンパイラがfoo
の準備をするためにどのくらいのメモリ知ることはできませんので、それはクラスが前方宣言なしで別のクラスのインスタンスへのポインタを持つことができないのはなぜですか?
class foo{
foo bar;
};
を行うことは不可能です知っています。 しかし、考えてみます。
class A{
B::C* foo;
};
class B{
class C{
};
};
コンパイラが、なぜこれが、その後は不可能であるCの定義に関係なく、正確にサイズを知っているだろうことは非常に合理的なようですか? (標準は、明示的にすることを禁じていますか?何のために?)、バックC
に続いreinterpret_cast
それをuintptr_t
としてfoo
を治療することである制約をバイパスする、私は非常に、粗な方法を持って
、これはただのです私は本当に(客観的)理由を得ていないことを示し、それはまともな理由なく使用された場合、それが本当に悪い習慣であることを私は知っています。
最後に、この規格では禁止されていることが判明しています。
class other {};
namespace N {
class foo {
other* p;
};
class other {};
}
を考慮すべきother*
:
これはポインタなどに固有のものではありません。同じクラスのメンバーを除いて、一般に表示されるまで名前を使用することはできません。 – chris
@chrisは、それがサイズの考慮に十分なポインタだと言っているだけではありませんか? – YiFei
@YiFei 'other'は型名ではないかもしれませんし、変数の名前かもしれません。 – songyuanyao