問題タブ [visual-c++-2013]
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++ - VC++ 2013: using-declaration + メンバー関数の再定義によりコンパイル エラーが発生する
ポリシーを指定して、クラスの動作を変更できるようにしたいと考えています。このポリシーは、boost::variant の訪問者として使用する必要があります。ほとんどの場合に適したデフォルトのポリシーがありますが、ユーザーはいくつかのオーバーロードを追加または置換する必要がある場合があります。
vc++ 2013 がこのコードをエラーでコンパイルしないことがわかりましたC3066: there are multiple ways that an object of this type can be called with these arguments
。gcc と clang で同じコードがコンパイルされ、期待どおりに動作します。
vc++ 2013 のバグですか?
UPDこの例は vc++ 2010 で動作します。2013 バージョンのバグのようです。
UPD の回避策
c++ - 値の初期化と集計の初期化
値の初期化と集計の初期化が混在しているという問題に直面しています。これまでのところ、すべての初期化を次のように行うことに依存しようとしました。
auto var = タイプ{};
(はい、brace-initializer ctor と default ctor の落とし穴を認識しています。そのため、それについてのコメントはありません!)
これにより、var のメモリが適切に「ゼロ アウト」または初期化されることを期待しています。
しかし、VS 2013 Update 2 では、次のように表示されます。
出力は次のとおりです。
GCC 4.7.2 の場合:
私はこれを読みましたが、この非ゼロ化動作の理由がわかりません:
http://en.cppreference.com/w/cpp/language/value_initialization http://en.cppreference.com/w/cpp/language/aggregate_initialization
では、VS 2013 にはバグがありますか? a.b_stuff.g 配列をゼロにしないのはなぜですか?
c++ - インクルード ファイルを開けません: 'basewin.h': そのようなファイルまたはディレクトリはありません
ファイルセットをダウンロードするか、このエラーを取り除く場所を見つける方法を見つけようとしています。このとらえどころのない「basewin.h」はどこにも見つかりません。そのため、ライブラリが不足しているかどうかはわかりません。また、「windows.h」ステートメントと「basewin.h」ステートメントを切り替えてみました。プリコンパイル済みヘッダーを無効にしようとしました。どうやら、このファイルには「basewindow」クラスの情報が含まれているようです。
Visual Studio 2013 を使用しており、win32 プロジェクトを使用しています。マイクロソフトのチュートリアル Web サイトhttp://msdn.microsoft.com/en-us/library/windows/desktop/ff684181から例を実行しようとしています。 (v=vs.85).aspx . どんな助けでも大歓迎です。コードは次のとおりです。
c++ - 私のクラスには toString() メソッドがありますが、これを std::unordered_set でのハッシュに使用するにはどうすればよいですか?
MyClass
自明ではない内部状態を定義operator==
して持っていwstring toString()
ますが、その状態のシリアル化されたバージョンを返すメソッドを提供します。なのでonだけで使いやすいtoString()
と思いました。hash<wstring>
std::unordered_set
しかし、余分なファンクタークラスを定義せずに、きちんとした方法でこれを行うことは可能ですか? 私は VS2013 に移行した後、C++11 に慣れてきたばかりで、ラムダなどを定義できるようになったことは大きな前進の 1 つだと思いました。
これを行う最善の方法を提案していただきありがとうございます。
c++ - パラメータリストから関数オブジェクトの戻り値の型を推測する方法は?
vector<T>
aを に変換できる射影関数を作成しようとしていvector<R>
ます。次に例を示します。
最初の試み:
しかし、
私は得る:
エラー C2660: 'select': 関数は 2 つの引数を取りません
私は明示的に仕事に電話select<int,int>
しなければなりません。型が冗長なので、私はこれが好きではありません。
2 回目の試行:
結果は同じエラーで、関数は 2 つの引数を取りません。この場合、実際には 3 番目の型引数を指定する必要があります。
3 回目の試行:
為に
エラーは次のとおりです。
'select' : 'Selector' のテンプレート引数が無効です。クラス テンプレートが必要です
為に
エラー C2660: 'select': 関数は 2 つの引数を取りません
(最後の 2 つの試行が特に優れているわけではないことはわかっています。)
select()
このテンプレート関数を最初に書いたサンプル コードで機能するようにするにはどうすればよいですか?
c - defined() の結果に設定されたマクロから期待される値は?
以下の非常に単純な C プログラムで、予想されるコンパイラ エラーは何ですか? gcc は 1 ですが、MSVC 2013 は 2 です。
私の質問は、うまくいけば同様に単純です:
- C 仕様は defined() の値について何と言っていますか? その値を別のマクロに設定することについて話しているものは何も見つからないようです。
- 実際のコードは私が制御できるものではなく、「#if バー」がいたるところで使用されています。#if バーが MSVC で「期待どおり」に機能するように #define を変更する最も簡単な方法は何ですか? 私が考えることができる唯一のことは、それを展開することです:
.
c++ - NULL/nullptr を std::function<>& にキャストする際の失敗
このコードは VC2013 でのビルドに失敗します: (編集: ビルドに失敗する理由は尋ねていません)
エラーあり:
(最後に報告された 2 つのエラーの '_Fx=int' に注意してください)。
MyStruct rc(NULL)
に変更するMyStruct rc(nullptr)
とエラーが解決するので、私はそれで暮らすことができます。ただし、2 つのことが謎のままです。
1) MyStruct ctor から const 修飾子を削除するMyStruct( std::function<void()>& func)
と、非常に異なるエラーが発生します。
1>f:\work\main\dev\common\teststdfunction\teststdfunction\teststdfunction.cpp(16): エラー C2664: 'MyStruct::MyStruct(const MyStruct &)': 引数 1 を 'int' から 'std' に変換できません::関数 &'
これは元のエラーよりも理にかなっており、NULL を nullptr に修正しても解決しません。int (または nullptr) が へのキャストを拒否するstd::function<>&
のに、 a へのキャストに同意するのはconst std::function<>&
なぜですか?
2) 元のコードは VS2010 で期待どおりにコンパイルされ、動作します。あいまいな VS2010 ライブラリのバグですか?
編集: const/non const の質問に関する限り、関連するキャストと潜在的な型の不一致はおそらく赤いニシンだと思います。渡された引数 (NULL または nullptr) はリテラルであり、したがって const です。非 const 参照にバインドすることはできません。例えば:
そうですか?私はまだ何かを見逃していますか?