問題タブ [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.

0 投票する
2 に答える
720 参照

c++ - 関数パラメーターとしての型が不完全ですか?

出力にポリシーを使用するテンプレートクラスと、データメンバーのタイプを決定する別のテンプレート引数があります。さらに、コンストラクターは、プライベートポインターに格納されている基本クラスへのポインターを受け取ります。このオブジェクトの関数は、テンプレートクラスへのthisポインターを取得して、データへのアクセスを許可します。コードでは、これは次のようになります。

ShapeGeneratorはインターフェースであり、実装する必要があります。次のようになります。

これをg++4.3.4(cygwin)でコンパイルすると、ShapeGenerator::generateShapeでエラーが発生します'ModelCreater' is not a type。ModelCreatorの前方宣言を入れましたが、何も変わりませんでした。タイプとパラメーターのいくつかの組み合わせを試してみました。たとえば、ベクトルのみを渡すと、不完全なタイプについて何かを示すエラーメッセージが表示されました。これがここでの問題だと思います。

それで、特定の議論なしでテンプレート化されたタイプを渡すことは可能ですか?もしそうなら、どのように?

編集: 私はModelCreatorタイプ名に縛られていません。もっとテンプレートを書かなければならない場合-これは問題ではありません。ただし、ShapeCreatorオブジェクトでModelCreatorのタイプを指定したくありません。それは可能ですか?

edit2:わかりまし た、私はこの「デザイン」について少し楽観的だったと思います。いくつかの材料を投入してスープを手に入れるだけでよかったでしょう。しかし今、塩は鍋の中の水の種類を知らなければなりません。テンプレートをプレーンな古い構成に変更します。みんなありがとう。

0 投票する
3 に答える
6074 参照

c++ - C/C++ コンパイラは、ヘッダー ファイル内のプロトタイプの定義をどのように見つけますか?

ヘッダー ファイルで関数を宣言し、その関数の定義を他のファイルに配置すると、コンパイラ/リンカーはどのように定義を見つけますか? パス内のすべてのファイルを体系的に検索しますか、それともより洗練されたソリューションがありますか? これはここ数日間私を悩ませてきましたが、その説明を見つけることができませんでした.

0 投票する
2 に答える
5058 参照

c++ - C++ブースト前方宣言の質問

私は図書館のアーキテクチャを調べることに時間を費やしboost::、次の事実に興味を持っていました。

ライブラリの一部では、yyy_fwd.hppアイデアがかなり一般的に使用されています(boost/detailまたはboost/flyweight例を参照)。

これらのファイルには、明らかに一部のテンプレートベースのクラスの前方宣言のみが含まれており、私が理解している限り、コンパイル時間の点でメリットがあります。

誰かがどのような場合に役立つかを指摘できますか?自分のテンプレートを設計するときに同じアイデアを使用する必要がありますか?

ありがとうございました。

0 投票する
3 に答える
2906 参照

c++ - C++ 前方宣言と純粋仮想関数

前方宣言と仮想関数の使用に問題があります。コンパイル中に次のエラー メッセージが表示されました。

コンパイラは、これらの関数はまだ純粋な仮想関数であると言っていましたが、私はそれらを適切に宣言および定義しました。何が問題なのかわからない。

これが私のソースコードです。

ありがとうございました。

0 投票する
1 に答える
369 参照

c++ - C ++での前方宣言

私は前方宣言したい:

しかし、デフォルトのテンプレート引数による再定義についての私のg ++​​のベビーベッド。どうすればこれを達成できますか?

0 投票する
1 に答える
1077 参照

iphone - 前方宣言の警告を理解する

私はiPhoneアプリのObjective-cで最初の行を書いています。

これはコードです:

これを行うと、私は

警告:プロトコル'ImageFlowScrollViewDelegate'の定義が見つかりません

私はそれを使用して修正することができます:

しかし、なぜ前方宣言アプローチが私に警告を与えているのか知りたいです。

0 投票する
2 に答える
1216 参照

c++ - C++ テンプレート関数と前方宣言

私は、MSVC を使用して Windows でコンパイルおよびリンクする (さらには商用製品をリリースした) コードに取り組んでいます。ただし、GCC ではコンパイルされません。次のエラーが発生します。

CBaseValue.h

CValueType.h

これが問題である理由を理解しています。基本クラス (CBaseValue) には、派生クラス (この場合は CValueType) を使用するテンプレート化された関数があります。

ここでは、MSVC が C++ 仕様に正確に従っていないように見えます。しかし、テンプレート化された関数を呼び出すコードが実際にコンパイルされるまで前方宣言を使用するという MSVC の動作も、現時点ではより望ましいものです。多くの基本コードを書き直さなくても、このコードを GCC で動作させることができる回避策を知っている人はいますか?

私自身の調査から、「-fno-implicit-templates」を g++ に渡すと役立つように見えますが、呼び出されたテンプレート タイプを明示的に定義する必要があります。それらはたくさんあるので、それを避けることができれば、それを好む. 一般的なコンセンサスがこれが私の最良の選択肢であるということである場合...そうしてください!

誰かが疑問に思っているかもしれませんが、コードを Mac に移植しているので、現在 GCC を使用しています。

0 投票する
6 に答える
34443 参照

c++ - 前方宣言とインクルード

次の2つのシナリオを検討してください(質問全体を完成させ、より明確にするために編集しました)

ケース 1: (以下に正しく記載されているようにコンパイルされない)

ケース 2: (唯一の変更...コンパイル エラーなしで動作します)

A.cpp と B.cpp の両方が一緒に準拠していると仮定します。上記の 2 つのシナリオに違いはありますか? ある方法を他の方法よりも優先する理由はありますか?

編集:では、シナリオ1を機能させるにはどうすればよいですか。

0 投票する
4 に答える
270 参照

c++ - C++ Forward クラスを宣言しますか?

私が持っている場合は.hで:

クラス AAAAAA を使用します。クラスの権利を前方宣言していますか?

なぜこれを行うのでしょうか?

必要ですか?

利点は何ですか?欠点?

0 投票する
4 に答える
15199 参照

c++ - 変数の前方宣言?

C++ に移植しなければならない C コードがいくつかあります。コードには構造があります

そして、2 つのグローバル配列が宣言され、次のように初期化されます。

これは C では正常に機能しますが、C++ ではエラーが発生します (変数が再宣言されます)。C++ で変数を前方宣言することはできませんか?