問題タブ [visual-c++-2012]

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 投票する
1 に答える
3357 参照

qt - 致命的なエラー LNK1104: ファイル 'mfc110d.lib' を開けません

現在、VS c++ 2012 (Ultimate 試用版) でプログラムを開発しています。第 3 部のライブラリ ( Qt5.1.1 x64 および openCV 2.4.5 ) を使用します。ビルドしようとすると、「致命的なエラー LNK1104: ファイル 'mfc110d.lib' を開けません」というメッセージが表示されます。このライブラリを見つけようとしましたが、私のマシンには存在しないようです。このプロジェクトは当初、別のマシンで開発されました。以前にこの問題に遭遇した人はいますか?

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

c++ - `L"%s"` 指定子に一致する `char const*` が渡されたときの `swprintf` の動作

私は Excel プラグインを作成しており、Excel のwchar_t 出力を生成する必要があります (ただし、内部的には 100%であり、実際にはプレーン ASCII にchar制限されています)。charある時点で、私は swprintf変換を行うために使用しています:

Excel はある種の CJK 文字を表示しますが、message (type char const*) は印刷可能な ASCII (16 進値 0x20-0x7E) 以外の文字を含まない null で終了する文字列です。

私はこれを小さなテストプログラムで試し、生成された文字列を 16 進数でダンプしましたが、VC++ はmessage それが であるかのように扱っているように見えます (ただし、1 バイトですが、正しくwchar_t const*認識されているようです)。'\0'これは、(私が期待してい たものではなく)のwchar_tような値になります。0x65680x0068, 0x0065

C99 標準によれば、"%s"指定子 の場合、「関数 [...] を繰り返し呼び出すかのようswprintfに」から文字を変換する必要があります。表示されている動作は Visual C++ ライブラリのエラーですか、それともグローバル ロケールに変更が必要なものがあるのでしょうか?char const*mbrtowc

(FWIW: g++ を使用して小さなテスト プログラムをコンパイルして実行すると、期待どおりの動作が得られます。ただし、G++ は Excel プラグインのオプションではありません。少なくとも現時点ではそうではありません。)

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

c++ - C++ 文字列を分割して、文字列全体とその一部/文字を個別に取得する方法

私の質問は、C++ で文字列を分割するにはどうすればよいですか? たとえば、私は `

  1. [,(,a,*,b,...... のように式全体を個別に取得する必要があります。
  2. そして、適切な位置に[,(,),{,(,),},] のようなブラケットのみを取得したい

いくつかの簡単な方法でこれらを行うにはどうすればよいですか

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

c++ - std::ペア移動は定義で省略されていませんか?

Visual Studio 2012 で非常に奇妙なことに気付きました: ペア オブジェクトを次のように定義します。

VC11 のペアのコピー/移動を省略しません。この呼び出しは次のように表示されます

つまり、一時的なペア作成され、objp 変数に移動されます。(pair<...> obj;デフォルトの ctor のみをログに記録すると宣言する)

LogMe テスト オブジェクトだけでクロス チェックしました。

ここで割り当ては省略されます。

IDEOne (gcc 4.8.1 を使用) でテストすると、無関係な移動が常に省略されていることが示されるため、これは VC11 に固有のようです。

何が起きてる? 初期化コピーが省略されていることに頼ることができないことは、私を緊張させます。

注: リリース バージョンとデバッグ バージョンのテストでは、同じ結果が表示されます。(MSVCの最適化フラグとは無関係にコピー省略が実行されるため、これは予想していたでしょう。)


テストする完全なソースコード ( ideone リンクも参照):

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

visual-c++-2012 - Serialport Visual C++ に配列を書き込む

RS232経由でPCからマイクロチップに通信するプログラムを書いています。

私は C# に慣れていますが、Visual C++ を使い始めました。

次のエラーが表示されます。

IntelliSense: オーバーロードされた関数"System::IO::Ports::SerialPort::Write"のインスタンスが引数リストに一致しません 引数の型は次のとおりです: (RTC_Visual::uint8 [27U], int,RTC_Visual::uint8)

シリアルポートに書き込むコマンドを次のように書きました。

誰かが私が間違っていること、またはserialport->writeメソッドの正しい構造を教えてください。

前もって感謝します

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

visual-studio-2012 - Visual C++ 2012 プロジェクト フィルターをマージする際に体系的な競合を回避するにはどうすればよいですか?

新しいファイルが Visual C++ プロジェクトに追加されると、IDE はそれらを次の 2 つの場所に追加します。

  • メイン プロジェクト ファイル (例: myproject.vcxproj)
  • プロジェクト「フィルター」、ソリューション エクスプローラーの仮想パスのリポジトリ (例: myproject.vcxproj.filters)

ファイルの追加をマージすることは、メイン プロジェクト ファイルにとっては問題ではありませんが、フィルターの競合の原因となることがよくあります。この問題は、IDE が常にフィルタ リストの最後に新しい要素を追加するという事実から発生します。

問題を説明するために、フィルターが最初は次のようになっているとします。

次に、プログラマー A が追加newFileA.hしてコミットすると、フィルターは次のように更新されます。

プログラマー B も を追加newFileB.hし、ヘッド リビジョンでノート同期されている場合、彼のフィルターのローカル コピーは次のようになります。

プログラマー A の変更と同期しようとすると、7-8-9 行目でプログラマー B のマージ競合が体系的に引き起こされます。これは、変更がまったく同じ場所で発生するためです。

この問題の発生を防ぐ方法はありますか? Visual Studio での構成の変更、マージ ツール (できればAraxis Merge または Beyond Compare) の特別なオプション、またはその他の方法によるものですか?

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

visual-studio - Visual C++ 2012: プログラムを開始できません (デバッグ試行時にプログラムを削除しますか??)

プログラムをデバッグしようとすると、次のエラーが発生します。

アクティブなプロジェクトとして正しいプロジェクトを設定しました。これは、今まで問題なく実行されていた .exe です。コンパイルするだけでは、実際には適切なディレクトリに TestStuff.exe が作成されますが、デバッグしようとすると TestStuff.exe が削除され、存在しないと主張されます。ソースを変更せずに Debug ディレクトリ内のすべてを削除すると、すべてが最新であり、コンパイルする必要はないと主張されます。ソース ファイルをいじって再コンパイルすると、.exe が表示されますが、もちろんデバッグしようとすると VC++ によって削除されます。

どうすればこれを逃れることができますか?

.suo ファイルの名前を変更してみましたが、無駄でした。.sln 自体以外にいじるファイルはないようです... VC++ を再起動しても役に立ちません :(

編集: リリース ビルドは IDE から実行されますが、デバッグ ビルドは実行されません。それは有用の正反対のようなものです

編集 2: デバッグ TestStuff.exe を手動で実行すると、次のエラーが発生します。

だから、私のプログラムには何かがひどく間違っていると思います.何が、なぜコンパイルできるのに実行できないのかわからない. また、それ自体を削除します:(

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

visual-c++-2012 - MSVC ++最適化で揮発性静的を取り除く

「プラグイン」を名前で作成できるように、特定の「プラグイン」クラスがファクトリ クラスに登録される Visual Studio ソリューションがあります。これらのプラグインは、ファクトリとともに、静的ライブラリ プロジェクトに存在します。

登録は、揮発性の静的登録テンプレート クラスを介して行われ、それぞれが独自のプラグイン コンパイル ユニット内にあります (したがって、登録プロセスは各プラグインによって「実行」され、利用可能なプラグインの中心的な情報はありません)。

しかし、問題は、PluginClass がコードの他の場所で逐語的に使用されていない場合、リンカがコードを最適化することを選択することです。つまり、上記の static は決して実行されません。

これは、コンパイラまたはリンカのバグのように思えます。静的は揮発性であると具体的に述べているためです (つまり、「触れないでください!」) :)

回避策は明らかに、上記の登録を、常に含まれていることがわかっているコンパイルユニットに移動することです。もちろん、それは機能します。ただし、それほどきれいではありません。

アイデア?

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

c++ - std::list および std::map の Visual C++11 スタック アロケーター

リストとマップの特定の使用方法のパフォーマンスを向上させたいと考えています。この場合、アイテムの数には 100000 のオーダーの厳しい制限があります。STL のデフォルト アロケータは明らかに、この状況では最良の選択ではありません。何千もの小さなオブジェクトすべてに非常に長い時間がかかります (>10 秒!)。他のすべての潜在的な問題は言うまでもありません。

したがって、明らかにこれを改善するために、すべてのリスト/マップ ノードを格納するための適切な量のメモリを事前に割り当てることができます。これまでのところ、(std::allocator_traits から派生することにより) デフォルト アロケータの動作バージョンを実装することができました。これは、各ノードに alloc/free を使用します。しかし、これを変更して、たとえば非常に単純なスタックを「ステートフル」に使用できるようにする方法を見つけるのに苦労しています。

そして、次のようにリストとマップをインスタンス化しています。

それMemPoolStack自体はここでは実際の問題ではありません。おそらくバグがありますが、これは単なる例です。ポイントは、MemPoolStackクラスunique_ptrが事前に割り当てられたメモリと他のいくつかのメンバー変数に a を格納することです。

問題は、Visual C++11 マップまたはリストがアロケーターを構築できるさまざまな方法がすべて、リストまたはマップごとに 1 つのインスタンスになるようMemPoolStackに、クラス内に my への参照が必要なことです。次に、 in 、およびinを使用できます。MemPoolMemPoolStackMemPoolStack::Pop()MemPool::allocate()MemPoolStack::Push()MemPool::deallocate()

サイズを指定して、アロケータを最初に構築する方法も必要です。を入れてみshared_ptr<MemPoolStack>ましMemPoolたが、リストがアロケーターのデフォルトコンストラクターを呼び出すことを決定したときに失われました...

また、元の問題に対する優れた代替ソリューションを得るために、このコードをすべて破棄することにもオープンです。

0 投票する
3 に答える
656 参照

c++ - キャンセルされたビルドでランダムに破損するプリコンパイル済みヘッダーに対処する方法は?

プリコンパイル済みヘッダーを多用するプロジェクトで Visual C++ 2012 を使用しています。非常に重いため、悪名高い/Zmスイッチが使用されています。

進行中のビルドをキャンセルすると、次のビルドで次のエラーが発生することがあります。

10 回のうち 9 回は問題なく動作しますが、これが発生した場合は、ビルドを再開する前に .pch を見つけて手動で削除する必要があります。

それは私を少し悩ませます。これを防ぐ方法はありますか?マイクロソフトからのパッチ?または、Visual に .pch を強制的に削除させ、問題が発生したときにビルドを自動的に再起動させる方法はありますか? または、私が考えていなかった他の解決策はありますか?

編集:これが私が実行しているVisualのバージョンです: