問題タブ [visual-c++-2010]
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++2010およびComeauC++でテストしたときに、期待どおりにコンパイルおよび機能します。ただし、をFoo
テンプレート自体にすると、上記のスニペットはVC++2010で機能しなくなります。
たとえば、次のスニペット:
次のエラークラスが生成されます。
- 誰かがここで何が起こっているのかを平易な英語で説明できますか?
Foo
VC ++ 2010でこれを修正するにはどうすればよいですか(つまり、内部の疑似明示的な特殊化をテンプレートに保持します)?
c++ - テンプレート化されたクラスでの static const メンバーの初期化
「static const」メンバーの初期化に関して問題があります。テンプレート化されたクラスでは、const メンバーを定義し、クラス外で初期化します。
このクラスが複数の .cpp ファイルに実装されている .h ファイルを含めると、LNK2005 エラー (私は VS2010 を使用しています) が表示され、定数が既に定義されているというメッセージが表示されます。
メンバーの初期化を .cpp ファイルに入れてみましたが、定数がまったく定義されていないというリンカー エラーが発生します。リストがテンプレート化されておらず、初期化を .cpp ファイルに入れた場合、すべて問題ありません。
この状況の解決策はありますか? 私はすでにファイルの周りに #ifdef/define 節を持っていますが、それは間違いなく解決策ではありません。
c++ - Visual Studio 2010 x64 での C++ リンク エラー
C++ コード ベースを VS2005 から VS2010 にアップグレードしており、サード パーティの C++ 依存関係を再構築しています。これらの 32 ビットのビルドには問題はありませんが、64 ビット (x64) のリンクで問題が発生し続けます。多くの標準ライブラリ関数の未解決の外部を取得しています。例えば:
msvcprtd.lib をリンク行に明示的に追加して、ライブラリ解決のデバッグを有効にしようとしましたが、C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\amd64\msvcprtd.lib でシンボルを検索しているように見えますが、そうではありませんそれらを見つける。
なぜこれが起こっているのか誰にも分かりますか?
c++ - テンプレート関数の特殊化のデフォルト引数
トークンの関数のデフォルトの引数行に構文エラーC2689およびC2059が表示され::
ます。しかし、専門性がなければ、うまくいきます。そして、デフォルトの引数を変更しても、まだ特殊化を行っている場合:
問題もなくなりました。
今、私がこのようにそれを使用する場合:function<int>(1,2,3);
またはfunction<float>(1.0f)
それは素晴らしいので、テンプレート関数が特殊化されている場合、それを呼び出すときにデフォルトの引数を書き直す必要があるようです?
しかし、2番目のケースでは、呼び出し時に構文エラーがないstd::numeric_limits<T>::..
状態に置き換えますが、それはなぜですか?T(..)
function<int>(1)
(私はVisual Studio 2010 x64を使用しています)
元の問題はバグが原因であるため、質問は現在、それを回避する方法に変更されていますか?
asynchronous - unbounded_buffer、_CrtSetDbgFlagおよびメモリリーク
新しい機能の1つである非同期エージェントライブラリを使用しようとしています。追加しました
unbounded_buffer m_myDataBuffer; 私のC++クラスには、これ以上何もありません。エージェントはまだ実行されていません。
アプリケーションでメモリリーク検出を有効にするために、次を使用しています。
しかし、アプリケーションウィンドウを閉じた後(私は単純なWin 32 GUIアプリケーションを使用しています)、VisualStudioは大量のメモリリークを示しています。
コメントアウトするとすぐにリークがなくなります
またはコメントアウトした後
unbounded_bufferを使用しなくても解放するために、何か特別なことはありますか?または、特別な方法で_CrtSetDbgFlagを設定する必要がありますか?_CrtSetDbgFlagはメモリリークの原因ですか、それともこの場合に何らかの理由で誤った検出を作成していて、実際のメモリリークはありませんか?ここで何が欠けていますか?
私も持っているので、これらのリークは私のコードから来ていないことを100%確信しています
stdafx.hにあるので、コードからのメモリリークにはファイル名と行があります。しかし、unbounded_bufferのものにはそのような情報がないので、エージェントライブラリからのものだと思います。
visual-studio-2010 - カスタムOSのSTL-std::listは機能しますが、std::vectorは機能しません
VisualStudio2010でgrub-bootableC++カーネルを試してみました。
newとdeleteが書き込まれ、動的に割り当てられた配列などが機能するようになりました。たとえば、STLリストを使用できます。memcpyルーチンを作成した後、それらをソートすることもできます。問題は、std::vectorタイプを使用する場合です。ベクトルを作成するだけで、カーネルがララランドに送られます。
明らかに、ある種の関数の実装が欠けていますが、STLを調べてそれを探し、手ぶらで出てきました。push_backで失敗します:
そしてエーテルに消えます。
私が欠けているものについて何か推測はありますか?
はい、それはintのベクトルです。混乱させて申し訳ありません。それだけでなく、失敗するコンストラクターではなく、push_backの呼び出しです。
c++ - VC2010でC++0x機能を無効にしますか?
VC++2010のC++0xモードにはオフスイッチがありますか?私は0x以外のコンパイラでコンパイルすることになっているプロジェクトに取り組んでいるので、現在の標準に対してコンパイルしたいと思います。(新機能のいずれも直接使用されていない場合でも、C ++ 0xをより寛容にする微妙な点があります)。
私が見つけた最も近いスイッチはでしConfiguration Properties -> C/C++ -> Language -> Disable Language Extensions
たが、そうではありません。
c++ - 保護されたコンストラクター + 抽象インターフェイスで make_shared を使用する
抽象インターフェイスとそのインターフェイスから派生した実装があり、コンストラクターが保護されている場合 (これらのオブジェクトの作成はクラス ファクトリからのみ利用可能 - DI パターンを実装するため)、ファクトリ関数で make_shared を使用するにはどうすればよいですか?
例えば:
make_shared は明らかに、InterfaceImpl または実際には IInterface の保護されたコンストラクターにアクセスできず、次のエラーが発生します。
ここを読んで(質問:boost::make_sharedを私のクラスの友達にする方法)、実装クラスに次のものを入れてみました:
それでもコンパイルされません。そこで、もう 1 つ IInterface クラスにも入れました。まだ喜びはありません。ここで私は何を間違えましたか?
編集:「友人」を使用して、コンパイルに使用される完全なソース ファイル...
c++ - クラスが 2 つのテンプレート化された親クラスから継承する場合のあいまいな呼び出し。なんで?
テンプレート引数として指定されたクラスに対してアクションを実行するテンプレート化されたクラスがあります。一部のクラスでは、機能を 1 つのクラスに「グループ化」して、呼び出し元を簡単にしたいと考えています。実際、コードは次のようになります (名前は変更されています)。
問題は、引数として CustomerOrder を指定して ProcessingFrontEnd::process を呼び出すと、コンパイラがそれについて文句を言うことです。
小規模なテスト アプリケーションで問題を再現しようとしました。これはコードです:
実際、これをコンパイルすると、Microsoft の VS2010 コンパイラは次のエラーを返します。
このテスト アプリケーションをさまざまな型 (char+void*、double+void*) と呼び出しのさまざまな引数 ('c'、3.14) でテストしましたが、エラー メッセージは常に同じです。
これを VS2005 と VS2010 でテストしましたが、常に同じエラーが発生します。
コンパイラが呼び出す正しい関数を判断できないのはなぜですか? これがコンパイラを混乱させるのはなぜですか? それとも、Microsoft コンパイラの単なるバグですか?
編集: クラスに 2 つの push_back メソッドを明示的に追加すると、次のようになります。
コンパイラはもう文句を言いません。したがって、これらのメソッドを使用すると、文字と void-pointer を明確に区別できます。2 つの push_back メソッドが親から継承されている場合、なぜ彼はこれを行うことができないのでしょうか?
visual-studio-2010 - Intellisenseの品質と安定性はMSVC++2010で改善されましたか?
2008年から2010年にアップグレードした方のために、2つの別々の質問があります。
- このバージョンでは、完全性の点でインテリセンスがはるかにうまく機能しますか?
- それでも、NCBファイルの破損やその他のパフォーマンス/安定性の問題に悩まされていますか?