2014-04-07 6 views
7

Quindi, ho pensato che stavo cercando di fare qualcosa di semplice, ma apparentemente non .. ."errore: richiesta per 'dimensione' membro 'in', che è di tipo puntatore" ma non pensavo che fosse un puntatore

ho scritto questa funzione in modo da poter estendere in un secondo momento e hanno un modo rapido per dare all'utente un menu quando richiesto andando menu(mystrings):

int menu(string a[]) { 
    int choice(0); 
    cout << "Make a selection" << endl; 
    for(int i=0; i<a.size(); i++) { 
     cout << i << ") " << a[i] << endl; 
    } 
    cin >> choice; 
    cout << endl; 
    return choice; 
} 

Ma per qualche motivo ottengo:

main.cpp: In function ‘int menu(std::string*)’: 
main.cpp:38:12: error: request for member ‘size’ in ‘a’, which is of pointer type ‘std::string* {aka std::basic_string<char>*}’ (maybe you meant to use ‘->’ ?) 
    int n = a.size(); 

quando Provo la compilazione. Qualcuno potrebbe tradurre quell'errore per me e spiegare cosa è ->, grazie.

+1

Le matrici non sono classi. Non hanno funzioni membro. Usa 'std :: array' o' std :: vector' a seconda delle tue esigenze. – chris

+0

perché un [] è un * – paulm

+0

Suppongo che stai facendo ['utilizzando lo spazio dei nomi std;'] (http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice). – Deduplicator

risposta

10

Si passa una serie di strings e si tenta di chiamare size() nella matrice. Gli array degenerano in puntatori quando vengono passati a una funzione, il che spiega il tuo errore.

L'operatore -> o "operatore di direzione" (nome che uso), è solo una combinazione abbreviata di (*obj).func(). Questo è utile se hai un puntatore a un oggetto di classe. Esempio:

string *s = &someotherstring; 
s->size(); //instead of (*s).size(), saves keystrokes 
+0

Non degradare, degenerare. Comunque pieno. – Deduplicator

+0

Potrei avere qualche informazione in più? Non sono abituato a usare i puntatori, esattamente come userò l'operatore '->', e ha un nome così posso saperne di più? Grazie. –

+0

@captainjamie Vedi modifica – yizzlez

Problemi correlati