問題タブ [diamond-problem]

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 投票する
1 に答える
2840 参照

c++ - ダイヤモンド継承最低基本クラスコンストラクター

コードは次のとおりです。

コード :

質問 :

1.)Unknownクラスがインスタンス化された場合、どのようにすべてのスーパークラスを初期化しますか?Animalのインスタンスは1つしか作成されないので、mysefがコンストラクターを2回呼び出す必要がないようにするにはどうすればよいですか?

ありがとうございました

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

c++ - g ++「次の仮想関数は純粋であるため」抽象基本クラス

エラーを生成するコード例を次に示します。

「ContainerImpl」は問題ありませんが、「SortedContainerImpl」は間違っていたようです。

g ++は不平を言います:

get_size() と get(int) を再利用するために、ContainerImpl から SortedContainerImpl を継承します。

私は C++ に詳しくありません。この問題の性質と、どうすれば修正できますか?

皆さんありがとう。

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

c++ - 多重継承の不具合。ベース関数を呼び出す方法は?

私は C++ を学んでおり、学校の課題では、完全に正しくなくても、ダイヤモンド構造を使用する必要があります。

(単純化するためにすべてのメソッドとコンストラクターを削除しました)

さて、コミックブックを作成してその購入価格を知りたい場合、どうすればよいでしょうか? ComicBook で getPurchasePrice() を実行すると、次のエラーが発生します。

ChildrenBook と AdultBook に virtual を配置すると、あいまいさが解決されると思いましたか?

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

c++ - 同じ基本クラスへの参照には、メモリ内に個別のオフセットが必要です

私はこのプログラムでコンパイラーの間にいくつかの矛盾を発見しました、

ほとんどのコンパイラは、sizeof(C)== 8で、sizeof(C)は実際には12であると主張します。私が見つけた唯一のコンパイラはそうではなく、8であると言っているのはMicrosoft VisualStudio2010です。

私より賢い人から言われた理由は、B内にAの2つの別個の参照があり、互いに異なる個々のオフセットを保持する必要があるためです。まず、Cから派生したAはオフセット0にあり、メンバーb内の2番目のAは0の最初のAと同じオフセットにすることはできないため、4バイトのパディングが挿入されます。

ほとんどのコンパイラはこの動作を実装しているので、両方のAが異なる参照を持っていることを確認するためにどのような場合が必要か疑問に思いました。なぜこれが当てはまるのかについての直感をお探しですか?

誰かがそれが規格によって要求される条件であるかもしれないと言いました、そして、我々はそれの理由が何であるかについて興味がありましたか?

ありがとうございました

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

scala - トレイト使用時の Scala とダイヤモンドの継承

与えられた特性:

クラスを作りたい

現在、StorageTrait のメソッドsizeはメソッド YetAnotherStorageTrait とは異なるものを返します (これはまだサイズですが、コレクションは異なります)。

Scalaでそのようなケースを設計する正しい方法は何ですか?

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

c++ - 複数/ダイヤモンドの継承からの継承

私は次のシナリオを持っています:

ここで、Dのインスタンスを作成すると、すべてが正常に機能します。ただし、Xのインスタンスを作成すると、コンパイラエラーが発生し、Aのデフォルトコンストラクタを呼び出そうとしていることを通知します。これは存在しません。作成するとコンパイルされますが、デフォルトのコンストラクターのみが呼び出されるため、idが正しく設定/初期化されません。

これは、次のようにXのコンストラクターを実装することで修正できます。

しかし、私の理解では、これは不要なはずです。だから私のエラーはどこにありますか?

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

c++ - C++ ヒープ エラー _CrtlsValidHeapPointer(pUserData)

MSVC でコンパイルした後、私のプログラムは実行時にアサーション エラーをトリガーします: _CrtlsValidHeapPointer(pUserData)ですが、コードは問題ないように見えます...



コードの何が問題になっていますか?

0 投票する
0 に答える
539 参照

c++ - 共通のテンプレートクラスを共有するクラスの多重継承に起因するあいまいさを解決します

テンプレートクラスであり、テンプレートとしていくつかのクラスを受け入れる基本クラスを作成しようとしています。それ自体が最終クラスの親である他の2つのクラスの親クラスのこの基本クラス。したがって、ルート基本クラスがテンプレートクラスであることに加えて、C++での従来のダイヤモンド問題があります。ここで仮想継承を使用しても、うまくいきません。

編集:いくつかのコードを含めました(そしてタイプミスを修正しました)