Perché non è possibile indicizzare uno std :: vector nella finestra immediata?
-
24-09-2019 - |
Domanda
Così, ho un vettore
std::vector<std::string> lines.
I riempire questo vettore, e può accedervi come
std::string temp = lines[0];
Tuttavia, nella finestra immediata, sia
lines[0] - error:overloaded operator not found
e
lines.at(0) - error:symbol is ambiguous
non funzionano affatto. C'è un trucco per utilizzando la finestra immediata con C ++. Sono per lo più proveniente da un background C #, dove tutto funziona bene (e ho intellisense nella finestra immediata). Non mi aspettavo C ++ per essere grande, ma ho pensato che avrebbe funzionato per cose oltre int. Qualcuno può dirmi che cosa sto facendo male? Grazie.
EDIT: Vorrei essere chiaro, niente funziona davvero nella finestra immediata, questo è solo un esempio semplificato
EDIT: Sono in modalità debug
Soluzione
Le finestre immediate e orologi non supportano gli operatori di overload. C'è qualche supporto in là per la stampa di contenitori standard nel suo complesso in modo sensibile (vedi, ad esempio, rel, http://www.virtualdub.org/blog/pivot/entry.php?id=120 ), ma questo non si estende ad essere in grado di utilizzare operator[]
su di loro.
Speriamo che questo sarà migliorata nelle revisioni successive del debugger, ma per ora, a guardare l'elemento-esimo di un vettore, prova lines._Myfirst[i]
.
(_Myfirst
, nelle librerie standard forniti con VC ++, sembra essere il membro variabile in un std::vector
che punta al primo elemento della sequenza. Quindi questo è solo esaminando un vettore, come se si trattasse di qualsiasi altro oggetto. Per lavorare su questo, ho dovuto guardare le intestazioni ... abbastanza difficile, ma spero che questo vi aiuterà. probabilmente si può fare qualcosa di simile con gli altri contenitori, ma dovrete cercare nelle intestazioni di capire come .)
(A proposito, se hai lavorato in C #, il debugger C ++ sarà probabilmente sembrare al confronto un po 'meno chiazza di petrolio, in generale, e questo è solo un esempio di questo. Ho l'impressione che ci sia stato molto più lavoro mettere nel lato CLR).
Altri suggerimenti
Nelle versioni di Visual Studio di modernizato (ad esempio 2013/2015) variabile membro _Myfirst non esiste più di una variabile std :: vector. Uso _C_begin invece - mezzi per l'esempio dato uso es lines._C_begin [i].