問題タブ [visual-c++-2015]
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++ - クラスのコピー コンストラクターが削除されたときにクラスの配列メンバーを初期化する
これは、私が取り組んでいるユース ケースの小さいバージョンです。
この VS 2015 Update 2 をコンパイルすると、次のエラーが発生します。
私は周りを見回して、これには2つの理由のうちの1つがあるのではないかと疑っていました.
std::mutex
1)削除されたコンストラクターメンバーのコピー
2)これは、私が見ているものと似ているかもしれないと思いました。
どちらですか?VS 2015 Update 2 コンパイラによってスローされるこのエラーを回避するにはどうすればよいですか?
UPDATE : に渡す必要があるいくつかのパラメーターを受け取るコンストラクターを更新しましたFoo_typedef
。
c++ - エラー C1001: コンパイラで内部エラーが発生しました
C++ テンプレート タスク内に仮想関数があり、Visual Studio 2015 でコンパイルすると (デバッグ/リリースと x86/x64 のすべての組み合わせを試しました)、次のコード行でコンパイラ エラー C1001 で一貫して失敗します。
e_Ty
クラスのテンプレート パラメータはどこにありますか。e_Ty
このエラーは、テンプレート クラスを に設定して使用した場合にのみ発生しstd::pair<const int &, int &>
ます。これが機能しない正当な理由はありますか、それとも MSVC のバグですか?
編集
ノート:
l
事前に宣言された (関数呼び出しの結果として値が割り当てられた) ローカル変数です。- 無効化の最適化、使用
auto
、割り当てスタイルの初期化の使用を試みましたが、どれも機能しませんでした。 e_Ty
が の場合、コードは正常にコンパイルされますint
。
c++ - FormatMessage が ERROR_SYSTEM_PROCESS_TERMINATED および ERROR_UNHANDLED_EXCEPTION システム エラーの部分的なメッセージしか作成しないのはなぜですか?
Windows API 内で FormatMessage 関数を使用して、システム エラー コードからメッセージ文字列を生成しています。一部のエラー コードでは、完全なメッセージが作成されていないように見えることに気付きました。
例として、次のサンプル プログラムを取り上げます。
MSDNによると、次のように表示されます。
{致命的なシステム エラー}
%hs システム プロセスは、ステータス 0x%08x (0x%08x 0x%08x) で予期せず終了しました。システムがシャットダウンされました。
ただし、サンプル プログラムでは次のように表示されます。
{致命的なシステム エラー}
%hs システム プロセスは、ステータス 0x で予期せず終了しました
ERROR_UNHANDLED_EXCEPTION
完全なメッセージも作成されないことに気付きました (MSDN のリストと比較した場合)。予想される両方のメッセージには0x%08プレースホルダーが含まれていますが、メッセージは0xの後で終了します。
私が見る限り、他のエラー メッセージは MSDN のリストと一致しているようです (つまり、問題は と に限定されているようERROR_UNHANDLED_EXCEPTION
ですERROR_SYSTEM_PROCESS_TERMINATED
)。
engf-010 の功績 - Visual Studio でエラー ルックアップ ツール ([ツール] - [エラー ルックアップ]) を使用すると、同じ結果が得られます。エラー コードは 574 と 591 です。
これらのメッセージが切り取られている理由を誰か知っていますか?
とにかく完全なメッセージを取得する方法はありますか?
c++ - VC++ でファイルシステム フォルダを管理するには?
私はフォルダー構造が私の C++ 名前空間構造を反映するように (主にファイル名の衝突を避けるために) 好きであり、ソリューション エクスプローラーでこの構造を表示するのが好きです。後者は、VC++ の「フィルター」機能を使用して、フォルダーごとにフィルターを作成することで実現します (ネストされたフォルダーのネストされたフィルターを含む)。ただし、このような設定を維持すると、ファイル/フォルダーを作成または移動するたびに作業が重複することになります。VC# でできるように、ソリューション エクスプローラーでフォルダー構造を直接表示および管理する方法はありますか?
または、私がXY 問題のケースを抱えている場合、あらゆる種類の名前の衝突を回避して、プロジェクトをきれいに構成するためのより良い方法はありますか?
私のアプローチが少なくとも 1 つの人気のある C++ プロジェクト (LibCinder) で使用されているのを見たことがありますが、彼らはどのようにして狂わずにそれを管理しているのでしょうか。:)
c++ - VS2015 と VC++ 2008 ツールセットのテンプレート推定エラー
問題を再現するサンプル コード:
このコードは、MS VC++2008 を使用すると正常にコンパイルされ、VC++2015 では vc140 ツールセットを使用しますが、VC++2015 プロジェクトで vc90 (VC++2008) ツールセットを使用するとコンパイルに失敗します。の奇妙な診断を与える
Func の型を推測するときに、コンパイラが __thiscall 呼び出し規則指定子を失っているようです。コードのさまざまな部分で __thiscall を強制的に指定しようとしましたが、成功しませんでした。プロジェクト全体を vc14 ツールセットに変換することは、さまざまな依存関係のために方法ではなく、VS 2008 の下に保持することはありそうもない方法です。コンパイラにそのような構造を理解させるためのアイデアはありますか?
アップデート
コードの変更
呼び出しはaction< A >( &A::f );
機能しますが、少し醜く見えます-コンパイラーが両方のテンプレート引数(TとFunc)の型を自動的に推測できることを期待しています
c++ - sizeof を使用した MSVC と GCC の一貫性のない動作
次のコードを検討してください。
GCC はそれをコンパイルし、未使用の変数について警告するだけです。
ただし、Visual C++ 2015 は次のようにコンパイルできません。
ライン上
でStaticFunc()
。
他の行s2 = ...
、およびコンパイルs3 = ...
で問題ありません。main()
これは MSVC のバグですか、それともここで何か基本的なことを見逃していますか?
visual-c++ - 異なる時間/チームでコンパイルされた同じ VS の C++ DLL を使用する - ABI 互換性?
繰り返しますが、同じVisual-C++ バージョンのライブラリ間の ABI 互換性を探しています。
異なるプロジェクト ファイルで異なる時期にビルドされた、異なるチームのいくつかの内部 C++ DLL を組み合わせて一致させたいと考えています。ビルド時間が長いため、各チームが別のチームのライブラリのソース コードを再コンパイルする大規模なモノリシック ビルドは避けたいと考えています。
C++ インターフェイスで C++ DLL を使用する場合、すべての DLL が同じコンパイラ/Visual Studio バージョンでコンパイルされている場合にのみこれを実行できることは明らかです 。
私にはすぐにはわかりませんが、ABI の互換性を得るには、正確に同じにする必要があります。
- debug (
_DEBUG
) と release (NDEBUG
) を混在させることはできませんが、これらが異なるバージョンの共有ランタイムにリンクしていることからも明らかです。 - まったく同じバージョンのコンパイラが必要ですか、それとも結果の DLL が同じ共有C++ ランタイム (つまり、基本的に同じ再配布可能ファイル) にリンクされていれば十分ですか? (完全なC++オブジェクトを渡すと、静的は飛ばないと思います)
- 同じ vc++ バージョンの 2 つの C++ DLL が互換性を持つために同じである必要がある
コンパイラ(およびリンカー) オプションのリストは文書化されていますか?
- たとえば、同じ
/O
スイッチが必要ですか?最適化レベルは ABI の互換性に影響しますか? (そうではないことは確かです。) - または、両方のバージョンで同じ
/EH
スイッチを使用する必要がありますか? - それとも
/volatile:ms|iso
...?
- たとえば、同じ
基本的に、ABI の互換性を説明する Visual-C++ DLL に関連付ける (メタ) データのセットを作成したいと考えています。
違いがある場合、現時点では VS2015 のみに焦点を当てています。
visual-studio - Visual-C++-2017 バイナリは VC++-2015 と互換性がありますか?
スティーブは、VC 2015 と VC 2017 は実際には (これから)バイナリ互換性があると教えてくれました。
ゼロ情報が見つかりました。これは2017 (RC) のリリース ノートに記載されています。
- VC++-2017バイナリでビルドされた C++ (C++ インターフェイス) DLL は、VC++-2015 でビルドされた DLL と互換性がありますか?
- 2017 と 2015 は同じ (動的)ランタイム ライブラリを使用しますか?
- その場合、 Platform Toolsetとの実行時の違いは何ですか? (*)
Visual Studio 2017 (v141)
Visual Studio 2015 (v140)
(*): ええ、実際に先に進んで 2017 RC をインストールしました。表面的には、少なくとも同じMSVCRT が使用されています。つまりmsvcp140.dll
、vcruntime140.dll
(プラットフォーム ツールセットが「v141」と呼ばれているにもかかわらず。