clangコンパイラを使用したC++のForward Declarationに関する問題があります。ここに私のコードです。これは、CReferenceメンバのデータを不完全型として指し示します。完全な宣言がC++でのクラスの前方宣言、不完全型
答えて
前方宣言は、コンパイラは、タイプの完全な定義を必要としないとき、あなたはそれへのポインタと参照を使用することができます。つまり、Internal data;
をInternal* data
またはInternal& data
に変更すると正常に機能します。
Internal data;
を使用すると、CReference
クラスの構造を作成できるように、コンパイラはIntrenal
という全体の定義を知る必要があります。
前方宣言が有用で使用可能になるまで 助けてください
class Internal;
class CReference {
private:
Internal data;
public:
CReference() {}
~CReference(){}
};
class Internal {
public:
Internal() {}
~Internal() {}
};
ほぼ完璧な答えです。残されているのは、彼がCReferenceの上のInternalの定義を動かすことができ、それがうまくいくということです。 –
@RickYorgason - もちろん、私はOPが、class internalについて 'class CReference'を"知る "必要がないので、明らかに見えると思います。 –
タイプをクラスのメンバーとして使用するには、クラスのサイズを正しく計算できるように、コンパイラーはそのサイズを知る必要があります。前方宣言はその情報を提供しません(C++は先読みして検索しようとはしません。特にボディが別の翻訳単位で宣言される可能性があるためです)ので、それを価値のあるメンバーとして使用することはできません。
ポインタと参照は、それらが参照する型に関係なく同じサイズであるため、代わりにポインタまたは参照を使用します。その後、コンパイラは操作を開始するとその型のサイズを知る必要があります。
上記のとおりです。前方宣言では、ヘッダーファイル内のヘッダーを避けるために、ヘッダのクラスのプレーンポインタのみを使用することがあります。
通常、インクルードはできるだけ少ない数のヘッダーファイルに保存します。 クラスを前方宣言することによって達成できますが、ネストされたクラスでなく、ポインタがヘッダーで使用されている場合に限ります。ポインタサイズは前方宣言によって提供される必要な情報です。
- 1. 前方宣言不完全型、再帰
- 2. 前方宣言とキャスト不完全型C++
- 3. 不完全な型/前方宣言/コンパイルの理解が必要です
- 4. C++不完全なクラス型のポインタ
- 5. フィールドが前方宣言に不完全な型を持っています
- 6. なぜC++テンプレートは不完全な型(前方宣言)を回避するのですか?
- 7. エラー - 不完全な型/フォワード宣言の無効な使用
- 8. 不完全な型のC++
- 9. C++クラスの前方宣言の欠点?
- 10. 構造体のC型不完全型
- 11. 不完全な型C++
- 12. C/C++ - 構造体タグ - 不完全型
- 13. 不完全な型、名前空間
- 14. C前方宣言
- 15. クラス宣言とインスタンス宣言の型キーワード
- 16. C++クラスの宣言と名前空間
- 17. 前方宣言クラス、クラスの再定義
- 18. 不完全型エラー
- 19. はエラーC - 不完全な型
- 20. Objective CのネームスペースC++クラスの前方宣言
- 21. 不完全な型の不正な使用(連鎖テンプレート化クラス)
- 22. クラスの前方宣言とクラスの宣言の違いは何ですか?
- 23. C++でのlambdaの前方宣言
- 24. C++エラー:フィールドに不完全な型があります - 独自のクラスオブジェクトを宣言します
- 25. Cの完全な宣言子とは何ですか?
- 26. Pythonの前方宣言の内部クラス
- 27. C++クラス宣言
- 28. クラスの前方宣言、関数
- 29. テンプレートパラメータ内の前方宣言クラスenum?
- 30. クラス変数の前方宣言
ここでは前方宣言は使用できません。 'CReference'は' Internal'の完全な宣言が必要です。 – juanchopanza
宣言を転送する場合は、 'Internal'へのポインタを使うべきです。 – user1520427
[フォワード宣言を使用するタイミングは?](http://stackoverflow.com/questions/553682/when-to-use-forward-declaration) – juanchopanza