問題タブ [name-hiding]

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 に答える
268 参照

c# - C# の継承、新しい修飾子、およびジェネリック

私はこれへの正しいアプローチを見つけるのに苦労しています:

私のデータ構造:

これらのデータ構造のコレクションを含むビジネス オブジェクト

私が使用しようとしている一般的な方法:

私の問題は、linq メソッドで「linqfluent.FlowCollection」を呼び出すと、 null である基本クラス Fluent のFlowCollection が呼び出されることです。

代わりに、子のプロパティの使用を強制するにはどうすればよいですか? ありがとう!

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

c++ - 継承されたクラスから抽象メソッドを実装する

私は今まで本当にやったことのないことをやろうとしています。私は基本的に3つのクラスを持っています。クラス A は純粋な仮想メソッドを持つ抽象クラスであり、クラス B はクラス A の仮想メソッドと同じ名前のメソッドを含む独自のクラスです。クラス C ですべてを結び付けようとしています。クラス B と A を C で継承し (多重継承)、クラス B のメソッドを使用してクラス A でそれらを実装します。このようにして、モジュラー アプローチを作成します。以下の例は、私のコードの非常に単純化されたバージョンです。

クラス C をコンパイルできますが、C のクラスを構築しようとすると、 「次のメンバーのために抽象クラスをインスタンス化できません: int methodA()' : is abstract」new C()というコンパイラ メッセージが表示されます。

クラスCで多重継承を介してクラスBを使用してクラスAを実装する方法はありますか?

編集:クラスBを具体的に保つことが望まれます。

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

c++ - 警告: オーバーロードされた仮想関数「Base::process」は、クラス「派生」で部分的にのみオーバーライドされます

警告を下回っています。私のコードの一部は次のとおりです。

警告を下回っています:

いずれにせよ、プロセスを仮想関数として作成したので、この警告が表示されないことを期待しています...この背後にある理由は何ですか??

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

c++ - 型エラーに名前を付けないのは、既存の列挙型が原因ですが、なぜですか?

私はちょうどこのエラーを受け取っていました:「エラー: 'Symbol' は型に名前を付けていません」

循環依存関係について話している他のいくつかの StackOverflow の質問を見つけましたが、ここではそうではありません。実際、これをソースファイルの先頭に置くことで再現できました:

これにより、3 行目に「エラー: 'Symbol' に型の名前がありません」と表示されます。2行目のコメントを外しても、同じエラーが表示されますが、その直前に「エラー:「クラスシンボル」の再定義」が表示されます!!

さらにいろいろ調べてみると、サードパーティのライブラリにenumwhereSymbolが定義されているように見えます。そのライブラリも私自身のコードも名前空間を使用していないため、コードを名前空間内に移動することはすでにやることリストにあったので、次にそれを行い、問題が解決することを願っています.

class Symbol{}しかし、私を混乱させているのは、なぜ回線でエラーが発生しなかったのですか? 列挙型と競合する場合、そのクラスをインスタンス化できないほどである場合、なぜ文句を言わなかったのですか? g++のフラグがないか、C++ の知識にギャップがあるように感じます。これはバグではなく機能だと誰かに言われるのを待っています。

(ところで、私が使用g++ -c -std=gnu++0x -Wall -g -Werror ...しているのはg ++ 4.8.1です)

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

c++ - C++ 特定のテンプレートの特殊化のためのオーバーロードされたメソッドの追加

非常に興味深い問題があります。2 つのテンプレート クラスがあります。1 つは任意のテンプレート パラメータを使用でき、もう 1 つはより特殊化されています (このおもちゃの問題では、浮動小数点を使用する必要があると言います)。

これで、別のテンプレート クラス Foo ができました。Foo にはそのテンプレート パラメータに制限がなく、関数 fooは同じ型のaCanBeAnythingまたは aを取ります。MustBeFloatここでは明示的なテンプレートのインスタンス化を使用したいと考えているためMustBeFloat、テンプレート パラメーターが浮動小数点の場合にのみオーバーロードが存在するようにします。

最も簡単な解決策は Foo を特殊化することですが、2 つのクラス間でインターフェイスを複製するという考えは好きではありません。私は、ほぼ機能する CRTP ソリューションを思いつきましたが、すぐに言及する 1 つの問題があります

問題は次のとおりです。そのままでは、への呼び出しはfoo( MustBeFloat<value_type> & )名前の非表示によって子クラスに隠され、コンパイラは「メソッド foo への一致する呼び出しがありません」というエラーを表示します。行を追加してダウンさせると、メソッドがそこまで存在しないため、using Parent::foo;非浮動小数点をインスタンス化するときに「親クラスに foo が存在しません」というエラーが表示されます。Foo

何か案は?よりエレガントで実用的なソリューションが利用可能であれば、このソリューション全体をスクレイピングしても問題ありません。

編集: 明確にするために: ここでは明示的なインスタンス化を行っています。そのため、浮動小数点テンプレート パラメーターがある場合にのみメソッドが存在する必要があります。

これにより、すべてのクラスメンバーがインスタンス化されるため、特定のメソッドをインスタンス化しないことに依存するメソッドは使用できません。

EDIT2:さて、私はこれを考えていました。これが私が行っている解決策です:

そして、それはすべて機能します。わーい!私をこの解決策に導き、他のより独創的な解決策を思いついた人々に感謝します。

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

c++ - 「using」キーワードによる名前の非表示を元に戻します。孫クラスでは機能しません

たとえば、以下のプログラムでは、「using」キーワードによる名前の非表示を元に戻しています。基本クラスと1つの派生クラスがある場合、「あいまいな呼び出しエラーが予想されます」。しかし、2 つの派生クラス (子と孫) があり、子と孫がここで同じオーバーロードされた関数を持っている場合、「using」キーワードによる名前の非表示も元に戻します。しかし、それはコンパイルされて出力を得ています。私の質問は、「オーバーロードされた関数へのあいまいな呼び出し」としてエラーが発生しない理由です。