私が知る限り、オブジェクトの戻り値の型を持つ関数を定義するとき、クラスは次のような前方宣言状態にあるだけです。
class A;
// Aを不完全な型として設定する前方宣言
A foo(){...}
//エラー: A は不完全な型です。そのオブジェクトへのポインターまたは参照の戻り値の型がある場合、正常に動作することがわかっています。
しかし、クラスとして戻り値の型を持つメソッドを定義すると、次のようになります。
class B{
public:
B foo(){...}
}
それは完全にうまく機能します。
クラスの定義内でメソッドを定義するとき、クラスはまだ不完全な型だと思います。そのため、前者と同様のエラーが表示されると思いますが、そうではありませんでした。誰かが理由を知っていますか?
ここで助けを求める前に、かなりの時間を探しました。(私は英語が苦手なので、私の説明はあなたを混乱させるかもしれません。申し訳ありません。)