2017-06-18 2 views
1

Ich baue eine geheime Nachricht Klasse, die einen Vektor von Zeilen in einer Nachricht und Anzahl der maximalen Zeiten hat jede Nachricht angezeigt werden kann. Ich versuche den Operator [] zu überladen, um eine Nachricht sehen zu können.Rückgabe eines const Verweis auf eine Zeichenfolge

Zum Beispiel: Wenn ich den folgenden Vektor von Strings initialisiert werden soll, soll ich in der Lage sein zu tun ...

vector<string> m = { 
    "Here is the first line", 
    "I have a second line as well", 
    "Third line of message"}; 

//initialize message - each line may be viewed a maximum of two times 
SelfDestructingMessage sdm(m, 2); 

cout << sdm[0] << endl; 
//outputs "Here is the first line" and decrements remaining views of first line by one 

Meine Frage ist, erklärte ich den Bediener in der Header-Datei und dann festgelegt, wie folgt in einer Funktion Datei:

string SelfDestructingMessage::operator[](size_t index){ 
    return const string & message[index]; 
} 

so sollte ich in der Lage sein, die eigentliche Nachricht mit dem Operator [], um zu sehen, die ein size_t Argument (Index) hat. Es sollte einen Const-Verweis auf die Nachrichtenzeichenfolge zurückgeben, die aus dem Vektor der Nachrichten, die für das Objekt spezifisch sind, indiziert wurde.

Aber beim Kompilieren bekomme ich einen "Fehler: erwarteten primären Ausdruck vor 'const' zurück const Zeichenfolge & Nachricht [Index];"

Irgendeine Idee über die Ursache?

Antwort

2

Der const string & Teil muss in der Signatur der Funktion enthalten sein. Es gibt keine Notwendigkeit, explizit konvertieren message[index] zu einem const string& im Körper, es geschieht automatisch:

const string& SelfDestructingMessage::operator[](size_t index){ 
    return message[index]; 
} 
// also update the declaration 

für die nächste Mal, bitte versuchen Sie es ein minimal, compilable example zu schreiben. Es hilft den Leuten wirklich, die versuchen, deine Frage zu beantworten.

Verwandte Themen