問題タブ [forward-declaration]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C++ での前方参照または宣言
ヘッダーファイルの循環参照を避けるために、C++ で前方参照/宣言を行うにはどうすればよいですか?
ヘッダー ファイルに #ifndef ガードがありますが、メモリは、この前方参照が必要であることを示しています。これは以前に使用したことがありますが、方法を思い出せません。
c++ - #include したくない場合の forward 宣言の代替手段
私は通常、ヘッダーを含める必要がないように、ほとんど何も考えずに前方宣言を使用します。この例に沿った何か:
一部の開発者は、インクルージョン サークルの問題を回避するためにこの方法を使用することを好みます。むしろ、物理設計の重要な部分である大規模な包含階層のオーバーヘッドを最小限に抑えるために使用します (特に大規模なプロジェクトの場合)。
ただし、場合によっては、メンバーをポインターではなく通常のオブジェクトとして宣言して、自動構築/破棄メカニズムの恩恵を受けることができます。これは、コンパイラがそのような場合にクラス定義を必要とするため、前方宣言を使用できなくなるという問題につながります。
したがって、ここで使用できる代替言語構造を誰かが知っていれば、例に示されているように「foo_object」を宣言できますが、そのヘッダーは含まれません。
よろしく
/ロバート
.net - 前方宣言の問題
C++ .NET 2.0 を使用しています
私は2つのフォームを持っています
最初のものは次のように宣言されています
2つ目はこうなる
stdafx.hi には
では質問へ!SubForm の行により、コンパイラは「未定義の型 myNamespace::frmMain の使用」を通知します
「ref class frmMain」がこの問題を解決しない理由について、私は本当に手がかりがありません
c++ - 基本クラスの前方宣言
他のファイルをあまり多く含まない適切なヘッダー ファイルを作成して、それらをクリーンに保ち、コンパイル時間を短縮しようとしています。
これを行っているときに2つの問題が発生しました。
基本クラスの前方宣言は機能しません。
/li>STD クラスの前方宣言が機能しません。
/li>
これらの問題を解決するにはどうすればよいですか?
c++ - 前方宣言はいつ使用できますか?
別のクラスのヘッダー ファイルでクラスの前方宣言を行うことが許可されている場合の定義を探しています。
基本クラス、メンバーとして保持されているクラス、参照によってメンバー関数に渡されるクラスなどに対してそれを行うことはできますか?
c++ - テンプレート: 前方宣言を使用してコンパイル時間を短縮しますか?
多くのテンプレート化されたクラスで構成されるライブラリを処理する必要があります。もちろん、それらはすべてヘッダー ファイルに実装されています。今、コンパイル単位のそれぞれと 1 つにライブラリ全体をほとんど含めなければならないという事実から生じる耐え難いほど長いコンパイル時間を短縮する方法を見つけようとしています。
テンプレートにもかかわらず、前方宣言を使用する可能性はありますか? 以下の例の行に沿って何かを試しています。例として、を回避しようとしましたが、が未定義で#include <vector>
あるため、リンカーエラーが発生しています。push_back
プリコンパイル済みヘッダーを 1 回試しましたが、コンパイル時間はまったく変わりませんでした (実際のヘッダーではなく、実際に読み込まれたことを確認しました)。しかし、プリコンパイル済みヘッダーを使用するべきだと皆さんがおっしゃるなら、もう一度試してみます。
更新: STL クラスを前方宣言する価値はないと言う人もいます。vector
上記の STL は単なる例であることを強調しておきます。私は実際に STL クラスを前方宣言しようとしているわけではありませんが、それは私が使用しなければならないいくつかのライブラリの、他の重くテンプレート化されたクラスに関するものです。
更新 2:上記の例を実際にコンパイルして適切にリンクする方法はありますか? ローガンは、おそらくでコンパイルされる別のファイルに使用してどこかに-fno-implicit-templates
置くことを提案していますが、それでもリンカーエラーが発生します。繰り返しますが、実際に使用しているテンプレート化されたクラスに適用できるように、それがどのように機能するかを理解しようとしています。template class std::vector<int>
.cpp
-fno-implicit-templates
std::vector
c++ - C++ テンプレートで不完全な型 (前方宣言) を回避できるのはなぜですか?
次の簡単なプログラムを 3 回繰り返してみました。これは、コンテナーとイテレーターのペアのクラスを作成するための非常に単純化された試みですが、不完全な型 (前方宣言) に関する問題に遭遇していました。すべてをテンプレート化すると、これが実際に可能であることがわかりました-ただし、実際にテンプレートパラメーターを使用した場合のみ! ( Google sparsetable codeを見てこれに気づきました。)
2番目が機能するのに3番目が機能しない理由を説明するヒントはありますか? (最初のものが機能しない理由はわかっています。コンパイラはコンテナーのメモリ レイアウトを知る必要があります。)
前もって感謝します。
c++ - C++ で構造体へのポインターを前方宣言する
次のような宣言を持つサードパーティのライブラリを使用しています。
そして、コンストラクターでHandleTypeを取るクラスを作成したいと思います。
HandleTypeを定義するヘッダーを含めずに。通常、そのような型を前方宣言するだけですが、この構文がわかりません。私は本当に次のようなことを言いたいです:
しかし、それはGCCで「*の前に識別子が必要です」と言っています。私が見ることができる唯一の解決策は、次のようにクラスを書くことです:
ただし、これはライブラリの内部の詳細に依存しています。つまり、実装の詳細である __INTERNAL_DATA という名前を使用します。
__INTERNAL_DATA (ライブラリの実装の一部) を使用せずに、HandleType (パブリック API の一部) を前方宣言できるように思われます。
編集:私が探しているものについての詳細を追加しました。
c - C89でtypedef'd構造を宣言するより良い方法は?
上記は機能しますが、より簡単な (またはより良い) 方法はありますか?
forward-declaration - 前方参照と前方宣言
少し混乱しています。前方宣言と前方参照の違いは何ですか? 前方宣言とは、私の頭では、まだ実装されていない関数を宣言することですが、これは間違っていますか? ケースを「前方参照」または「前方宣言」を宣言するために、指定された状況を見る必要がありますか?