問題タブ [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 に答える
888 参照

c++ - 非仮想デストラクタを使用したコンテナからの継承

一部のインクルード依存関係を排除するために、前方宣言とdポインターを使用しようとしています。多くの場所で読みやすさのためにXListtypedefを使用したことを除いて、すべてがうまく機能しています(例:) typedef QList<X> XList

typedef前方宣言の問題の回避策は、継承を使用することですclass XList : public QList<X>{};。QListには非仮想デストラクタがあります。Qt自身のQStringListが継承QList<QString>し、ヒープにXListsを割り当てていないという事実を考えると、この回避策に問題がありますか?XListクラスへのヒープ割り当てを明示的に禁止する必要がありますか?

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

c++ - C++ クラスを別のクラスから継承するものとして前方宣言する方法は?

次のようにクラスを前方宣言できることを知っています。

ただし、次のようなことはできますか。

?

ありがとう!

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

c++ - C++では、クラスを別のクラスから継承していると宣言することは可能ですか?

私はできることを知っています:

しかし、次のように、クラスを別のクラスから継承するものとして前方宣言できますか?


ユースケースの例は、共変参照の戻り値の型です。

...そして、somewhere.hを含まない別のヘッダーで

コンパイラが宣言を処理するために必要な唯一の情報は、パブリック基本クラスとして持っているRB* B:Foo()ものです。からの戻り値の何らかの種類の逆参照を行う場合は、明らかにどこか.h が必要になります。ただし、一部のクライアントが をまったく呼び出さない場合、コンパイルを大幅に高速化する可能性がある where.h をインクルードする理由はありません。RBRAFooFoo

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

c++ - 次の前方宣言された多重継承ポインタ変換コードはどのように機能しますか?

次のコードでは、ポインター変換と多重継承はどのように連携しますか?

私の理解はちょっと不安定です。

一方では、someWorkはBarについて何も知らないので、これは機能しないはずです。しかし一方で、私は前方宣言されたBarを持っています。

ありがとう!

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

c++ - 2 つのクラスとインライン関数

私には2つのクラスがあり、どちらも他のクラスの一部を使用しています。例:

#ifndefそして、上記の例のように定義すると、機能します (ヘッダーの無限再帰を避けるためにいくつかあります)。しかし、クラスにいくつかのインライン関数を追加したいとも思っています。そして、インライン関数の定義をヘッダーファイルに配置する必要があることをここで読みました.cppファイルに配置して他のcppファイルから呼び出したい場合は機能しないためです(実行すると、未定義の参照が発生しますリンクしています)。しかし、ここでの問題は次のようなものです。

エラーが表示されます: 不完全な型 'struct Class2' の無効な使用。

どうすればそれができますか?

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

c++ - ネストされた列挙型の前方宣言

次のようなコードがあります。

クラス B (A の前に宣言されている) で型 EMyEnum のメンバーを宣言したい。これは可能ですか?解決策はクラス B を 2 番目に宣言することだと思いますが、わかりやすくするために、そうしないことをお勧めします。

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

c++ - 前方宣言での「typedef-name ... をクラスとして使用」

私はここでいくつかのポリシーベースの設計を行っており、名前を短くするために多くのテンプレート タイプを typedef する必要があります。
問題は、これらの型のいずれかへのポインターを使用する必要がある場合に、それを前方宣言しようとするだけですが、コンパイラーはtest.cpp:8: error: using typedef-name ‘Test1’ after ‘class’
、obj がまったく必要ないため、サイズとは関係ありません。テンプレート全体を取り込みたくない ".h" ファイル内のポインター。
これは g++ です。

ヒントはありますか?

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

c++ - オブジェクト構築/フォワード関数宣言の曖昧さ

Observation: the codes pasted below were tested only with GCC 4.4.1, and I'm only interested in them working with GCC.

こんにちは、

理解できないオブジェクト構築ステートメントに出くわしたのはほんの数回ではありませんでした。そして、それによってどのような曖昧さがもたらされているかに気付いたのは今日だけでした。それを再現する方法を説明し、それを修正する方法があるかどうかを知りたいです (C++0x は許可されています)。ここに行きます。

コンストラクターが引数を 1 つだけ取るクラスがあり、この 1 つの引数の型がデフォルトのコンストラクターを持つ別のクラスであるとします。例えば:

スタック上に型のオブジェクトを構築しようとするとClass、あいまいさが生じます。

私はそれがオブジェクトの構築だと言っていますが、コンパイラはそれが関数本体内の前方宣言であると主張しています。まだ理解していない人のために、完全に機能する例を次に示します。

まあ、十分な例です。あまりにも反慣用的なものにすることなく、誰でもこれを回避するのを手伝ってくれますか (私はライブラリ開発者であり、人々は慣用的なライブラリが好きです)?

- 編集

どうでも。これは、ほとんどの厄介な解析のだまされています。なぜ A a(()); 仕事?.

ありがとう、sbi。

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

c++ - 前方宣言を使用するための C++ コードのリファクタリング

しばらく前から大規模なコードベースがあり、リファクタリングして少し整理しようとしています。私がやりたいことの 1 つは、ヘッダー ファイル全体を含めるのではなく、メンバーを転送宣言できるすべてのヘッダーを見つけることです。

これはかなり手間のかかるプロセスであり、どのヘッダーに前方宣言可能なメンバーがあるかを判断するのに役立つツールを探しています。

次のコードが前方宣言を使用できるという警告または提案を発行できるコンパイラ設定はありますか? 次のコンパイラ icc、gcc、sun studio、および HP の aCC を使用しています。

同じ仕事をすることができるスタンドアロンのツールはありますか?

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

c++ - 名前空間内でグローバル型を前方宣言します

ヘッダーファイルを使用せずにサードパーティのライブラリを使用したい。私のコードは独自の名前空間に存在するため、グローバル名前空間を汚染したくないため、従来の前方宣言を使用できません。現在、私はそのようなものを持っています:

名前空間に存在するような方法でグローバル型を前方宣言することは可能ですか?単純なtypedefは機能しません。