2014-04-07 1 views
7

Also dachte ich, ich versuchte etwas Einfaches zu tun, aber anscheinend nicht .. ."Fehler: Anfrage für Mitglieder 'Größe' in 'a', die von Zeigertyp ist" aber ich dachte nicht, dass es ein Zeiger war

ich diese Funktion geschrieben, damit ich es später und einen schnellen Weg, um dem Benutzer ein Menü bei Bedarf zu geben, indem sie menu(mystrings) haben verlängern könnte:

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; 
} 

Aber aus irgendeinem Grund bekomme ich:

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(); 

wenn Ich versuche es zu kompilieren. Könnte jemand diesen Fehler für mich übersetzen und erklären, was -> ist, danke.

+1

Arrays sind keine Klassen. Sie haben keine Mitgliedsfunktionen. Verwenden Sie 'std :: array' oder' std :: vector', je nach Ihren Bedürfnissen. – chris

+0

weil a [] ist ein * – paulm

+0

Ich nehme an, Sie tun ['using Namespace std;] (http://stackoverflow.com/questions/1452721/why-isusing-namespace-std-considered-bad-practice). – Deduplicator

Antwort

10

Sie übergeben ein Array von strings und versuchen, size() auf dem Array aufzurufen. Arrays degenerieren zu Zeigern, wenn sie an eine Funktion übergeben werden, was Ihren Fehler erklärt.

Der Operator ->, oder "Pfeiloperator" (Name, den ich verwende), ist nur Kurzform für (*obj).func(). Dies ist nützlich, wenn Sie einen Zeiger auf ein Klassenobjekt haben. Beispiel:

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

Nicht degradieren, degenerieren. Jedenfalls voll. – Deduplicator

+0

Könnte ich Sie um weitere Informationen bitten? Ich bin nicht gewohnt, Zeiger zu verwenden, wie genau würde ich den '->' Operator verwenden, und hat es einen Namen, damit ich mehr darüber erfahren kann? Vielen Dank. –

+0

@captainjamie Siehe bearbeiten – yizzlez

Verwandte Themen