Почему я не могу индексировать std::vector в непосредственном окне?

Итак, у меня есть вектор

 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 #, где все работает хорошо (и у меня есть intellisense в Immediate Window). Я не ожидал, что C++ будет отличным, но я решил, что он будет работать не только с целыми числами. Может ли кто-нибудь сказать мне, что я делаю неправильно? Спасибо.

РЕДАКТИРОВАТЬ: я должен быть ясным, ничего не работает в ближайшем окне, это просто упрощенный пример

РЕДАКТИРОВАТЬ: я в режиме отладки


person Steve    schedule 01.02.2010    source источник


Ответы (2)


Непосредственные и контрольные окна не поддерживают перегруженные операторы. Там есть некоторая поддержка для разумной печати стандартных контейнеров целиком (см., например, http://www.virtualdub.org/blog/pivot/entry.php?id=120), но это не распространяется на возможность использовать для них operator[].

Надеюсь, это будет улучшено в последующих версиях отладчика, а пока, чтобы посмотреть на i-й элемент вектора, попробуйте lines._Myfirst[i].

(_Myfirst в стандартных библиотеках, поставляемых с VC++, оказывается переменной-членом в std::vector, которая указывает на первый элемент последовательности. Таким образом, это просто проверка вектора, как если бы это был любой другой объект. Чтобы решить это , мне пришлось смотреть на заголовки... не очень удобно, но, надеюсь, это поможет вам. Вероятно, вы можете сделать что-то подобное и с другими контейнерами, но вам придется заглянуть в заголовки, чтобы понять, как это сделать.)

(Кстати, если вы работали на C#, отладчик C++, вероятно, по сравнению с ним в целом покажется немного менее гладким, и это лишь один из примеров. У меня сложилось впечатление, что в отладчик было вложено гораздо больше Сторона среды CLR.)

person Community    schedule 01.02.2010
comment
Вызов функций-членов в часах и непосредственных окнах тоже не работает. (Я обновил свой ответ, упомянув об отсутствии гладкости - это второй пример!) Однако обычно вы можете вызывать автономные функции. Раздражает, но вы можете привыкнуть к этому - не то чтобы у вас был выбор, конечно :) (Надеюсь, более поздние версии улучшат нативную сторону отладки; она уже полностью исправна, но просто не хватает полировки, которую имеет сторона CLR.) - person ; 01.02.2010
comment
.at(), вероятно, не работает по той же причине: он перегружен. - person MSalters; 02.02.2010

В современных версиях Visual Studio (например, 2013/2015) переменная-член _Myfirst больше не существует для переменной std::vector. Вместо этого используйте _C_begin - означает, что для данного примера используйте, например. строки._C_begin[i].

person ChF    schedule 16.12.2015
comment
не могли бы вы уточнить свой ответ или сделать его более полным с примером? Это может помочь спрашивающему получить более четкое представление о том, что вы имеете в виду. - person itsols; 16.12.2015