Почему я не могу проиндексировать вектор 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 ответа:
Непосредственные и наблюдательные окна не поддерживают перегруженные операторы. Там есть некоторая поддержка для печати стандартных контейнеров в целом разумным образом (см., например, http://www.virtualdub.org/blog/pivot/entry.php?id=120 ), но это не распространяется на возможность использовать
operator[]
на них.Надеюсь, что это будет улучшено в последующих версиях отладчика, но пока, чтобы посмотреть на i-й элемент вектора, попробуйте
lines._Myfirst[i]
.(
_Myfirst
, в стандартных библиотеках то, что приходит с VC++, оказывается переменной-членом вstd::vector
, которая указывает на первый элемент последовательности. Таким образом, это просто изучение вектора, как если бы это был любой другой объект. Чтобы разобраться в этом, мне пришлось взглянуть на заголовки... не очень удобно, но, надеюсь, это вам поможет. Вероятно, вы можете сделать что-то подобное с другими контейнерами, но вам придется посмотреть в заголовках, чтобы понять, как это сделать.)(кстати, если вы работали в C#, отладчик C++, вероятно, будет кажется, по сравнению с этим немного менее скользким в целом, и это только один пример этого. У меня сложилось впечатление, что в сторону CLR было вложено гораздо больше работы.)