Почему я не могу проиндексировать std :: vector в ближайшем окне? - PullRequest
13 голосов
/ 01 февраля 2010

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

 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 ++ будет отличным, но я подумал, что он будет работать не только для целых чисел. Может кто-нибудь сказать мне, что я делаю не так? Спасибо.

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

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

Ответы [ 2 ]

15 голосов
/ 01 февраля 2010

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

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

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

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

1 голос
/ 16 декабря 2015

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...