I tried to compile the following code
std::string key = "DISTRIB_DESCRIPTION=";
std::cout << "last five characters: " << key.substr(this.end()-5) << '\n';
And the compiler says
error: invalid use of ‘this’ in non-member function
std::cout << "last five characters: " << key.substr(this.end()-5) << '\n';
^
substr
is a "public member function" of std::string
, why can't I use this
?
I know I could just reference key
again instead of this
, but my original code was
std::cout << "Description: " << line.substr(found+key.length()+1).substr(this.begin(),this.length()-1) << '\n';
In the second use of substr
, the string does not have a name, so the only way to refer to it would be this
. I fixed it with
std::cout << "Description: " << line.substr(found+key.length()+1,line.length()-found-key.length()-2) << '\n';
But I am now curious to why this
won't work.
this
is only available when you are writing code as part of a non-static method of a class. In your particular case, it seems obvious to you that this
should refer to key
, but the compiler sees no reason for that.
Also, string.substr() takes an integer indicating the beginning position. string.end() returns an iterator, which will not work. What you likely want to do here is call string.length().
Simply replace the first piece of code with:
std::cout << "last five characters: " << key.substr(key.length()-5) << '\n';
And you should be okay.