私は最近CとJavaをたくさん使ってきましたので、なぜこれが許されないのか、C++に戻ってくるのはちょっと混乱しています。C++ - 不完全なクラスタイプですか?
incomplete type is not allowed
#pragma once
class Expression
{
private:
Expression power; // <--- incomplete type is not allowed
};
私はここで答えはExpression *power
にラインExpression power
を変更することであると考えているが、それは、なぜ私は理解していません。 vector<int> var
のようなオブジェクトをポインタなしで宣言できますが、2番目のオブジェクトは宣言されているファイルと同じ型のオブジェクトを持っています。私は周りを見回しましたが、クラスのオブジェクトを作成するチュートリアル/ビデオは見つかりません。
クラスを埋め込むことはできません。二度考えます:それは無限の再帰を引き起こします。代わりにポインタを使用するか、スマートポインタを使用してください。 –
無限再帰問題の他に、クラスのメンバを定義するために不完全型を使用することはできません。なぜなら、コンパイラはそのメンバのクラスインスタンスで確保する領域の量を知ることができないからです。タイプが不完全であるため、クラスがどれほど大きいかはまだ分かりません。 –
あなたのデザインを再考する、解決策としてこれを必要とする実際の問題はありません – user463035818