2016-05-23 8 views
-1

Ich habe versucht, den folgenden CodeC++ substr Methode - "ungültige Verwendung von 'this' in Nicht-Mitglied-Funktion"

std::string key = "DISTRIB_DESCRIPTION="; 
std::cout << "last five characters: " << key.substr(this.end()-5) << '\n'; 

Und die Compiler sagt

error: invalid use of ‘this’ in non-member function 
std::cout << "last five characters: " << key.substr(this.end()-5) << '\n'; 
               ^

substr ist ein „public zu kompilieren Mitgliedsfunktion "von std::string, warum kann ich this nicht verwenden?

Ich weiß, dass ich nur key wieder statt this verweisen konnte, aber mein ursprünglicher Code war

std::cout << "Description: " << line.substr(found+key.length()+1).substr(this.begin(),this.length()-1) << '\n'; 

In der zweiten Verwendung von substr, die Zeichenfolge haben keinen Namen, so dass der einzige Weg, um zu verweisen es wäre this. Ich reparierte es mit

std::cout << "Description: " << line.substr(found+key.length()+1,line.length()-found-key.length()-2) << '\n'; 

Aber ich bin jetzt gespannt, warum this nicht funktionieren.

+3

Sie müssen wirklich ein Buch über C++ lesen. – SergeyA

+1

Ich stimme zu, diese Frage als Off-Topic zu schließen, weil OP ein Buch braucht, keine SO-Frage. – SergeyA

+3

Ich denke nicht, dass wir Anfänger rausschmeißen sollten. OP hat verloren, zu verstehen, wo er hin muss. Ich denke, dass SO genau existiert, damit solche Antworten einen Platz haben. Die Frage wurde gemäß den Richtlinien von SO gestellt, ist auf zukünftige Fragen bezogen. Ich stimme, wir halten es offen. –

Antwort

4

this ist nur verfügbar, wenn Sie Code als Teil einer nicht statischen Methode einer Klasse schreiben. In Ihrem speziellen Fall scheint es für Sie offensichtlich, dass sich this auf key beziehen sollte, aber der Compiler sieht keinen Grund dafür.

Auch stringStr() nimmt eine ganze Zahl, die die Anfangsposition angibt. string.end() gibt einen Iterator zurück, der nicht funktioniert. Was Sie hier wahrscheinlich tun möchten, ist Aufruf string.length().

einfach das erste Stück Code ersetzen:

std::cout << "last five characters: " << key.substr(key.length()-5) << '\n'; 

Und Sie sollten in Ordnung sein.

Verwandte Themen