2010-02-01 4 views
13

Итак, у меня есть такой векторПочему я не могу индексировать 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++. В основном я получаю фон C#, где все работает красиво (и у меня есть intellisense в Immediate Window). Я не ожидал, что C++ будет отличным, но я решил, что это будет работать для вещей, кроме ints. Может ли кто-нибудь сказать мне, что я делаю неправильно? Благодарю.

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

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

ответ

14

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

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

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

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

+0

ОК, спасибо за помощь в этом, купите, почему бы .at() не удалось? – Steve

+0

Вызов функций-членов в часах и в ближайших окнах просто не работает. (Я обновил свой ответ, чтобы упомянуть о недостатке гладкости - это второй пример!) Однако вы можете обычно называть автономные функции. Раздражающий, но вы можете привыкнуть к нему - не то, что у вас есть выбор конечно :) (Надеюсь, что последующие версии улучшат родную отладочную сторону, это уже отлично поддается обслуживанию, но просто не хватает лака, который имеет сторона CLR.) –

+0

.at(), вероятно, сбой по той же причине: он перегружен. – MSalters

-1

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

+1

Вы можете продумать свой ответ или сделать его более полным с примером? Это может помочь исследователю получить более четкое представление о том, что вы имеете в виду. – itsols