2010-02-01 9 views
13

Tak, mam wektorzeDlaczego nie mogę zaindeksować wektora std :: w bezpośrednim oknie?

std::vector<std::string> lines. 

wypełnić ten wektor w górę, i można do niego dostęp jak

std::string temp = lines[0]; 

Jednak w najbliższym oknie, zarówno

lines[0] - error:overloaded operator not found 

i

lines.at(0) - error:symbol is ambiguous 

nie działają w ogóle. Czy istnieje trik do korzystania z bezpośredniego okna z C++. W większości pochodzę z tła C#, gdzie wszystko działa ładnie (i mam intellisense w Immediate Window). Nie spodziewałem się, że C++ będzie świetny, ale pomyślałem, że będzie działał na rzeczach innych niż int. Czy ktoś może mi powiedzieć, co robię źle? Dzięki.

EDIT: I powinny być jasne, nic naprawdę działa w bezpośrednim okna, to tylko uproszczony przykład

EDIT: Jestem w trybie debugowania

Odpowiedz

14

Bezpośrednim i oglądać systemu Windows nie obsługują przeciążeni operatorzy. Istnieje pewne wsparcie dla drukowania standardowych pojemników jako całości w sensowny sposób (patrz np. http://www.virtualdub.org/blog/pivot/entry.php?id=120), ale nie obejmuje to zastosowania na nich operator[].

Mam nadzieję, że zostanie to poprawione w późniejszych wersjach debuggera, ale teraz, aby spojrzeć na pierwszy element wektora, spróbuj lines._Myfirst[i].

(_Myfirst, w standardowych bibliotekach dostarczanych z VC++, okazuje się, że jest to zmienna składowa w std::vector, która wskazuje na pierwszy element sekwencji.Tak więc jest to po prostu badanie wektora tak, jakby był jakikolwiek inny obiekt. Aby to rozwiązać, musiałem spojrzeć na nagłówki ... niezbyt wygodne, ale mam nadzieję, że ci to pomoże.Możesz prawdopodobnie zrobić coś podobnego z innymi pojemnikami, ale będziesz musiał zajrzeć do nagłówków, aby wypracować jak.)

(Nawiasem mówiąc, jeśli pracujesz w języku C#, debugger C++ prawdopodobnie będzie wyglądał nieco mniej ogólnie, a to tylko jeden przykład. było znacznie więcej pracy po stronie CLR.)

+0

OK, dziękuję za pomoc w tej sprawie, kup dlaczego miałbym .at() upaść? – Steve

+0

Wywołanie funkcji członka w zegarku i okien natychmiastowych również nie działa. (Zaktualizowałem swoją odpowiedź, aby wspomnieć o braku zręczności - jest to drugi przykład!) Zazwyczaj można jednak wywoływać funkcje wolnostojące. Irytujące, ale możesz się do tego przyzwyczaić - nie, że masz jakiś wybór oczywiście :) (Mam nadzieję, że późniejsze wersje poprawią rodzimą stronę debugowania, jest już doskonale serwisowalna, ale po prostu brakuje w niej połysku, jaki ma strona CLR.) –

+0

.at() prawdopodobnie nie działa z tego samego powodu: jest przeciążony. – MSalters

-1

W nowszych wersjach Visual Studio (np. 2013/2015) _ Zmienna składowa Myfirst już nie istnieje dla zmiennej std :: vector. Zamiast tego użyj _C_begin - oznacza dla danego przykładu użycie np. lines._C_begin [i].

+1

czy możesz rozwinąć odpowiedź lub uzupełnić ją za pomocą przykładu? Może to pomóc ankieterowi uzyskać lepsze wyobrażenie o tym, co masz na myśli. – itsols

Powiązane problemy