13


1

イミディエイトウィンドウでstd :: vectorのインデックスを作成できないのはなぜですか?

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

 std::vector lines.

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

 std::string temp = lines[0];

ただし、イミディエイトウィンドウでは、両方

 lines[0] - error:overloaded operator not found

and

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

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

編集:私は明確にする必要があります、イミディエイトウィンドウで実際に機能するものはありません、これは単なる簡略化された例です

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

2 Answer


14


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

デバッガの以降のリビジョンでこれが改善されることを願っていますが、今のところ、ベクトルのi番目の要素を見るには、 `lines._Myfirst [i]`を試してください。

(VC ++に付属の標準ライブラリの _Myfirst`は、シーケンスの最初の要素を指す std

vector`のメンバー変数であることがあります。 したがって、これは、他のオブジェクトであるかのようにベクトルを調べているだけです。 これを解決するには、ヘッダーを調べる必要がありました…​ あまり便利ではありませんが、これが役立つことを願っています。 おそらく他のコンテナでも同様のことを行うことができますが、ヘッダーを調べて方法を確認する必要があります。

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


-1


現在のVisual Studioバージョン(例: 2013/2015)_Myfirstメンバー変数はstd

vector変数には存在しなくなりました。 代わりに_C_beginを使用します-指定された例では、例えば lines._C_begin [i]。