2010-02-01 13 views
13

Così, ho un vettorePerché non posso indicizzare un vettore std :: nella finestra immediata?

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

riempio questo vettore, e possono 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 usare la finestra immediata con C++. Principalmente vengo da uno sfondo C#, dove tutto funziona bene (e ho intellisense nella finestra immediata). Non mi aspettavo che il C++ fosse fantastico, ma ho pensato che avrebbe funzionato per cose oltre a quelle. Qualcuno può dirmi cosa sto facendo di sbagliato? Grazie.

EDIT: Vorrei essere chiaro, niente funziona davvero nella finestra immediata, questo è solo un esempio semplificato

EDIT: Sono in modalità debug

risposta

14

L'immediato e guardo le finestre non supportano operatori sovraccaricati. Vi è un certo supporto per la stampa di contenitori standard nel loro complesso in modo ragionevole (si veda, ad esempio, http://www.virtualdub.org/blog/pivot/entry.php?id=120), ma ciò non si estende alla possibilità di utilizzare operator[] su di essi.

Speriamo che questo sarà migliorato nelle revisioni successive del debugger, ma per ora, per guardare l'elemento i'th di un vettore, prova a lines._Myfirst[i].

(_Myfirst, nelle librerie standard forniti con VC++, sembra essere la variabile membro in una std::vector che punta al primo elemento della sequenza. Quindi questo è solo esaminando un vettore, come se si trattasse di qualsiasi altro oggetto. Per risolvere questo problema, ho dovuto esaminare le intestazioni ... non molto comodo, ma spero che questo ti sia d'aiuto. Probabilmente puoi fare qualcosa di simile con gli altri contenitori, ma dovrai cercare nelle intestazioni per risolvere il problema come.)

(A proposito, se hai lavorato in C#, il debugger di C++ sembrerà probabilmente un po 'meno slick in generale, e questo è solo un esempio di ciò. stato molto più lavoro messo nel lato CLR.)

+0

OK, grazie per l'aiuto su questo, comprare perché sarebbe .at() fallire? – Steve

+0

Anche chiamare funzioni membro nell'orologio e finestre immediate non sembra funzionare. (Ho aggiornato la mia risposta per menzionare la mancanza di fluidità - questo è un secondo esempio!) Tuttavia, di solito si possono chiamare funzioni indipendenti. Fastidioso, ma ci si può abituare - non che si abbia una scelta del corso :) (Speriamo che le revisioni successive miglioreranno il lato nativo di debugging, è già perfettamente funzionante, ma manca solo dello smalto che ha il lato CLR.) –

+0

.at() probabilmente fallisce per lo stesso motivo: è sovraccarico. – MSalters

-1

Nelle versioni di Visual Studio di oggi (ad es. 2013/2015) _Myfirst membro variabile non esiste più per una variabile std :: vector. Usa invece _C_begin - significa che per l'esempio dato usi per es. lines._C_begin [i].

+1

puoi per favore elaborare la tua risposta o renderla più completa con un esempio? Questo può aiutare l'interrogante a farsi un'idea più chiara di cosa intendi. – itsols