問題タブ [ambiguous-call]
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++ - テンプレート関数呼び出しのあいまい性エラー
テンプレートに詳しくありません。私はそれを学び始めたばかりです。次のプログラムでエラーが発生するのはなぜですか?
エラー:
私を助けてください。
crtp - CRTP でポリモーフィズムを試みるときに、G++ がこの一見簡単なあいまいさの範囲を解決できないのはなぜですか?
私は、それぞれが問題の特定の側面を解決できるテンプレート クラスを作成して、従来の抽象仮想クラスの作成に頼らずにそれらをごちゃまぜにできるようにしようとしています。そのためには、CRTP が最適なパラダイムになると思います。ただし、CRTP をもう少し使用すると、この弱い解決ロジックに閉じ込められていることがわかりました。コンパイラ (g++ 4.8.2) は、署名が異なっていても、異なるクラスの 2 つのメソッドを区別できません。メソッド名だけが同じです。
クラスの実装:
その後、次のように使用されます
コンパイルすると、次のエラーが表示されます。
これはコンパイラのバグですか、それとも実際に期待される結果ですか?
java - なぜこれはあいまいさを生み出さないのでしょうか?
次の構造のコードを書きました。
これがコンパイルされたことにかなり驚きました。
次に、最初のものを選択します。明らかに、これはある意味で選択するのが自然な方法ですが、最初のメソッドが存在しない場合、これは (空の varargs 配列を使用して) 2 番目のメソッドを呼び出す合理的な方法です。確かに、あいまいであると見なされ、コンパイル時にエラーが発生するはずですか?
それとも、これは特別なケースとして扱われますか?
新しいメソッドを追加すると既存のコードが壊れる可能性があり、それはあまり幸せな状態ではないため、そのように扱うのは間違っているようです。
(最初のメソッドが 2 番目のメソッドを含むサブクラスの新しいメソッドとして追加された場合に、最終的にどちらを呼び出すかはわかりません...)
c++ - この関数呼び出しは C++ でどのようにあいまいですか?
次のプログラムを検討してください: (ここでライブデモを参照してくださいhttp://ideone.com/7VHdoU )
コンパイラは次のエラーを出しています:
しかし、なぜ、どのようにあいまいなのかわかりませんか? ここでは、何らかの自動型昇格が含まれますか? fun を (3L) で呼び出すと、コンパイルが成功することがわかっています。
c++ - 基本クラス間での仮想メソッドのオーバーロードの解決
ビジュアル スタジオ 2013。
与えられた:
私はシンクを持っています:
しかし、次のコンパイラ エラーが発生します。
エラー C2385: 'foo' のあいまいなアクセス
ベース「base_1」の「foo」である可能性があります
またはベース「base_2」の「foo」である可能性があります
エラー C2660: 'base_1::foo': 関数は 2 つの引数を取りません
エラー C3861: 'foo': 識別子が見つかりません
私はこの問題を解決できることを知っています:
しかし、想像できると思いますが、仮想継承は、私が一緒に暮らさなければならない罪の 1 つです。私はおそらくアダプタを書くつもりです。しかし、コンパイラが base_2 で foo を解決しようとするのを妨げている原因がわかりません。私の同僚は、これはコンパイラ エラーだと信じていますが、私はすぐにベンダーを責めるつもりはありません。
C++ 仕様では、基底クラス間でオーバーロードされた仮想メソッドを解決することについて何と言っていますか?
haskell - 「show」によるHaskellでのあいまいな発生
私は関数型プログラミングが初めてで、Haskell でスタックを作成して表示しようとしています。プログラムで構築しているスタックを表示させたいのですが。これは私のコードです:
「show (push 1 empty)」を使用すると、「 1 <- | 」のような答えが (多かれ少なかれ) 期待できますが、コードをコンパイルできません。試してみると、次のエラーが表示されます。
プログラムが Prelude の「show」と be で定義された「show」を混同する可能性があるエラーは理解していますが、コードでそのエラーを確認できません。その上、いくつかの仲間は同じコードを持っており、プログラムはうまく動作します.
変更しなければならないもの、または見逃したものはありますか?
ありがとう!