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


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

 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 в непосредственном окне). Я не ожидал, что C++ будет отличным, но я полагал, что он будет работать для вещей, кроме ints. Кто-нибудь может мне сказать что я делаю не так? Спасибо.

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

EDIT: я нахожусь в режиме отладки

2 13

2 ответа:

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

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

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

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

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