問題タブ [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 投票する
5 に答える
23029 参照

c++ - ヘッダーファイルのインクルード / 前方宣言

私の C++ プロジェクトでは、いつ#include "myclass.h"ヘッダー ファイルのインクルード ( ) を使用する必要がありますか? また、いつクラス ( class CMyClass;) の前方宣言を使用する必要がありますか?

0 投票する
7 に答える
7242 参照

c++ - C++ 前方宣言の問題

いくつかの前方宣言を含むヘッダー ファイルがありますが、ヘッダー ファイルを実装ファイルにインクルードすると、前の前方宣言のインクルードの後に​​インクルードされ、このようなエラーが発生します。

これを回避するための標準は何ですか?

前もって感謝します。

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

c++ - C++:定義されていない型を使用する方法は?

C++ では、すべての型を使用する前に定義する必要があるため、ヘッダー ファイルを正しい順序でインクルードすることが重要になります。罰金。しかし、私の状況はどうですか:

Bunny.h:

コンパイラは、独自のクラス定義で使用する時点で技術的に完全に定義されていないため、不平を言います。Bunny私は何か愚かなことをしたからです(関係のない)。

Referenceポインタ型を取るようにテンプレート クラスを書き直す以外に(この場合、 の前方宣言を使用できますBunny)、これを解決する方法がわかりません。

助言がありますか?

EDIT:Referenceのクラス(XObjectデータモードオブジェクトの基本クラスです):

編集:これはうまくいきますが、問題は別のものでした。助けてくれてどうもありがとう!

0 投票する
5 に答える
1966 参照

c++ - 組み込みデータ型の前方宣言の使用

可能な限り、コンパイルを高速化するために、includeではなく前方宣言を使用することを理解しています。

私はこのようなクラスを持っていPersonます。

Studentそしてこのようなクラス

Student.hには、変換コンストラクターでclass Person;使用する前方宣言があります。Person罰金。しかし、私はコードで#include <string>使用している間のコンパイルエラーを避けるために行いました。std::stringここで前方宣言を使用してコンパイルエラーを回避するにはどうすればよいですか?出来ますか?

ありがとう。

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

types - OCaml 前方宣言

OCaml で C スタイルの前方宣言を行う方法はありますか?

私の問題は、相互に参照する 2 つのバリアントがあることです。

したがって、両方のタイプがもう一方のタイプを知っている必要があります..Googleで検索しましたが、残念ながらOCamlはそれほど広く使用されているプログラミング言語ではありません..

0 投票する
5 に答える
5744 参照

c++ - C++名前空間エイリアスと前方宣言

すべてのクラスをバージョン管理された名前空間に配置するC++サードパーティライブラリを使用しています。これを呼び出しましょうtplib_v44。また、一般的な名前空間エイリアスも定義します。

ジェネリック名前空間を使用して、自分の.hファイルでライブラリのメンバーを前方宣言する場合...

...サードパーティライブラリ(後で.cpp実装ファイルに含まれています)のヘッダーでコンパイラエラーが発生します。

バージョン固有の名前空間を使用すると、すべてが正常に機能しますが、...ポイントは何ですか?これに対処するための最良の方法は何ですか?

[編集]将来の視聴者のための参考までに、これはICUライブラリでした。解決策(少なくとも私の状況では)は、受け入れられた回答へのコメントにあります。

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

c++ - C ++:前方宣言時の不明なポインターサイズ(エラーC2036)

ヘッダーファイルで、名前空間の2つのメンバーを前方宣言しました。

コンパイラによって生成されるエラーは次のとおりです。

これはフォワード宣言の問題だと思いOdpます。どうすればこれを回避できますか?

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

c++ - C++のステートマシンが関与する前方宣言の問題の解決

最近、休止後にC ++開発に戻り、StateDesignPatternの実装について質問があります。GoFの本とまったく同じように、バニラパターンを使用しています。

私の問題は、ステートマシン自体が組み込みシステムの一部として使用されるハードウェアに基づいているため、設計が修正されて変更できないことです。これにより、2つの状態(特に)の間に循環依存が発生し、これを解決しようとしています。簡略化されたコードは次のとおりです(通常どおりヘッダーを使用してこれを解決しようとしましたが、それでも問題が発生しました。このコードスニペットではヘッダーを省略しています)。

問題は、基本的に、状態パターンでは、次の状態のコンストラクターを呼び出すContextクラスのChangeStateメソッドを呼び出すことによって状態遷移が行われることです。

循環依存のため、「問題」状態の両方のコンストラクターを事前に定義することができないため、コンストラクターを呼び出すことができません。

私はこの記事を見て、理想的な解決策のように思われたテンプレートメソッドを調べましたが、コンパイルされず、テンプレートに関する私の知識はかなり限られています...

私が持っていたもう1つのアイデアは、多重継承を介してヘルパークラスをサブクラス化された状態に導入し、基本クラスのコンストラクターを指定して、状態サブクラスのコンストラクターを参照できるかどうかを確認することです。しかし、それはかなり野心的だったと思います...

最後に、ファクトリメソッドデザインパターンを直接実装することが、問題全体を解決するための最良の方法でしょうか?

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

c++ - テンプレートで使用される関数をいつ宣言する必要がありますか?

(おそらく)簡単な質問があります。テンプレートで使用される関数をいつ宣言する必要がありますか?次のコードが出力されます(gcc> = 4.1を使用)。

私のAオブジェクトを初期化する

初期化なし

gcc 4.0を使用すると、次のコードが出力されます。

私のAオブジェクトを初期化する

文字列オブジェクトを初期化する

std :: stringとAの使用法の違いは何ですか?同じ振る舞いがあるべきではありませんか?

追加の前方宣言を使用すると正常に機能しますが、いつ必要になりますか?

乾杯、CSpille

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

c++ - フレンド関数を使用した前方宣言:不完全な型の無効な使用

このコードをコンパイルしようとすると、いくつかのエラーが発生しました。例えば

不完全なタイプの無効な使用

このコードの問題は何ですか?