Почему я не могу индексировать 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

вообще не работают. Есть ли уловка при использовании непосредственного окна с С++. В основном я получаю фон С#, где все работает красиво (и у меня есть intellisense в Immediate Window). Я не ожидал, что С++ будет отличным, но я решил, что это будет работать для вещей, кроме ints. Может ли кто-нибудь сказать мне, что я делаю неправильно? Спасибо.

EDIT: я должен быть ясен, ничего не работает в непосредственном окне, это просто упрощенный пример

EDIT: я в режиме отладки

Ответы

Ответ 1

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

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

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

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

Ответ 2

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