問題タブ [name-lookup]
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++ - GCC の問題: テンプレート引数に依存する基本クラスのメンバーを使用する
次のコードは gcc ではコンパイルされませんが、Visual Studio ではコンパイルされます。
エラーが発生します:
test.cpp: メンバー関数 'void B::bar()':
test.cpp:11: エラー: 'foo' はこのスコープで宣言されていません
しかし、そうあるべきです!私がに変更bar
した場合
その後、コンパイルされますが、これを行う必要はないと思います。GCCがここに従っているC ++の公式仕様に何かありますか、それとも単なる癖ですか?
c++ - 基本クラスのメンバー データへの派生テンプレート クラス アクセス
この質問は、このスレッドで尋ねられた質問を助長するものです。
次のクラス定義を使用します。
テンプレート クラスの基本クラスのメンバーにアクセスするときは、Bar<T>::_foo_arg
. これを回避する方法はありますか?テンプレートクラスメソッドで「using」ステートメント/ディレクティブを使用して、コードを簡素化できますか?
編集:
スコープの問題は、変数を this-> 構文で修飾することによって解決されます。
c++ - 'template' のベース クラスから派生クラスに 'typedef' を伝播しています
typedef のみを含む基本クラスを定義しようとしています。
BI で Vec_t が認識されず、明示的に記述する必要があるというエラーが表示されるのはなぜですか?
c++ - ADLが関数テンプレートを見つけられないのはなぜですか?
C ++仕様のどの部分が、引数に依存するルックアップが、関連付けられた名前空間のセットで関数テンプレートを見つけることを制限していますか?言い換えると、main
以下の最後の呼び出しがコンパイルに失敗するのはなぜですか?
c++ - 誤ったプライベート基本クラスにアクセスできませんか?
g++ 4.2.1 を使用してこのコードをコンパイルします。
私は得る:
ただし、wrap_rep
使用するクラスを変更するとST
:
それはうまくコンパイルされます。または、元のコードを次のように変更すると:
また、正常にコンパイルされます。私には、元のコードはそのままで問題ないようです。これは g++ のバグですか? そうでない場合、なぜテンプレートの使用が機能するのでしょうか? そして、他のケースでは、なぜ::S
必要なのですか?
c++ - 多重継承テンプレート クラス
私の最初の考えは、クラス A には messageA と messageB オブジェクトを受け入れる 2 つのオーバーロードされた送信関数が含まれているため、上記のコードは問題ないはずです。
ただし、コンパイラは次のエラーを表示します。
あいまいな理由がわかりますか?最初のサブミット呼び出しで、messageA バージョンを呼び出したいのは明らかではありませんか? 2 回目の送信呼び出しでは、messageB バージョンを呼び出したいですか?
c++ - 名前検索の説明
$10.2/4- "[ 注: たとえば、精巧な型指定子 (3.4.4) または基本指定子 (第 10 節) で名前を検索すると、すべての非型宣言が無視され、入れ子になった型指定子で名前が検索されます。 name-specifier (3.4.3) は、関数、変数、および列挙子の宣言を無視します。"
名前の検索について説明しているときに、このセクションでこのステートメントが非常に紛らわしいことがわかりました。
私の質問:
ルールに対する私の理解は正しいですか?
最後の行では、グローバル名前空間の関数を意味するのに対し、行では、
::S
新しい処理を自動的に struct を意味するのはなぜですか。S
::S
S
これはドキュメントのあいまいさを示しているのでしょうか、それとも C++ 標準ドキュメントから離れる日がまた来るのでしょうか?
c++ - 名前ルックアップの過負荷解決/あいまいさ(どれか)
$ 7.3.3 / 14(C ++ 03)
'f'のコードのコメントは、'B::x'と'C::x'の間のあいまいさが予想されることを示しています。
ただし、g ++(ideone)またはComeauを使用してコンパイルすると、エラーはわずかに異なります。B::xまたはC::xのあいまいさを示す代わりに、これらのエラーは、AがDのあいまいなベースであるという事実を示します。
prog.cpp:関数内'int f(D *)':prog.cpp:16:エラー:'A'は'D'のあいまいなベースです</p>
と
"ComeauTest.c"、21行目:エラー:基本クラス"A"はあいまいですreturnd-> x(); //あいまい:B::xまたはC::x
$ 10.2の名前検索ルールを見ると、コードスニペットのコメントが実際には正しくないように感じます。エラーは、実際、何よりもまず、基本クラス「A」のあいまいさに関連しています(たとえば、過負荷解決のあいまいさ)。何かご意見は?
c++ - 非const仮想メソッドをオーバーライドすると、constオーバーロードが非表示になりますか?
検討:
(私はGCCを使用しています。)
したがって、f()のconstバージョンはCに隠されているようです。これは私には非常に理にかなっていますが、標準で義務付けられていますか?
c++ - C++での距離計算エラー
私は次のコードを持っていますが、ここにエラーのリストがあります