14

だから、私はベクトルを持っています

 std::vector<std::string> lines. 

このベクトルを埋めて、次のようにアクセスできます

 std::string temp = lines[0];

ただし、即時ウィンドウでは、両方

 lines[0] - error:overloaded operator not found

 lines.at(0) - error:symbol is ambiguous

まったく動作しません。C++でイミディエイトウィンドウを使用するコツはありますか?私は主にC#のバックグラウンドから来ており、すべてがうまく機能しています(そして、イミディエイトウィンドウにインテリセンスがあります)。私はC++が素晴らしいとは思っていませんでしたが、int以外のことでも機能すると思いました。誰かが私が間違っていることを教えてもらえますか?ありがとう。

編集:私は明確にする必要があります、直接のウィンドウでは実際には何も機能しません、これは単なる単純化された例です

編集:私はデバッグモードです

4

2 に答える 2

15

イミディエイトウィンドウとウォッチウィンドウは、オーバーロードされた演算子をサポートしていません。そこには、標準的なコンテナー全体を適切な方法で印刷するためのサポートがいくつかあります(たとえば、http://www.virtualdub.org/blog/pivot/entry.php? id = 120を参照)が、そうではありません。それらで使用できるように拡張しoperator[]ます。

うまくいけば、これはデバッガーの今後のリビジョンで改善されるでしょうが、今のところ、ベクトルのi番目の要素を確認するには、を試してくださいlines._Myfirst[i]

_Myfirst、VC ++に付属する標準ライブラリでstd::vectorは、シーケンスの最初の要素を指すaのメンバー変数であるため、これは他のオブジェクトであるかのようにベクトルを調べているだけです。これを解決するには、ヘッダーを確認する必要がありました...あまり便利ではありませんが、これが役立つことを願っています。おそらく他のコンテナーと同様のことを行うことができますが、方法を理解するにはヘッダーを確認する必要があります。)

(ちなみに、C#で作業している場合、C ++デバッガーは、一般的には少し滑らかではないように見えますが、これはその一例にすぎません。 CLR側。)

于 2010-02-01T20:30:56.603 に答える
1

現在のVisualStudioバージョン(2013/2015など)では、std::vector変数の_Myfirstメンバー変数は存在しなくなりました。代わりに_C_beginを使用してください-与えられた例では、例えばlines._C_begin[i]を使用することを意味します。

于 2015-12-16T12:17:31.127 に答える