我试图编译以下代码
std::string key = "DISTRIB_DESCRIPTION=";
std::cout << "last five characters: " << key.substr(this.end()-5) << 'n';
编译器说
error: invalid use of ‘this’ in non-member function
std::cout << "last five characters: " << key.substr(this.end()-5) << 'n';
^
substr
是std::string
的"公共成员函数",为什么不能使用this
?
我知道我可以再次引用key
而不是this
,但我的原始代码是
std::cout << "Description: " << line.substr(found+key.length()+1).substr(this.begin(),this.length()-1) << 'n';
在 substr
的第二次使用中,字符串没有名称,因此引用它的唯一方法是 this
。我用
std::cout << "Description: " << line.substr(found+key.length()+1,line.length()-found-key.length()-2) << 'n';
但我现在很好奇为什么this
不起作用。
this
仅在将代码编写为类的非静态方法的一部分时才可用。在您的特定情况下,您似乎很明显this
应该引用key
,但编译器认为没有理由这样做。
此外,string.substr() 采用一个整数来指示起始位置。 string.end() 返回一个迭代器,该迭代器将不起作用。 你可能想在这里做的是调用string.length()。
只需将第一段代码替换为:
std::cout << "last five characters: " << key.substr(key.length()-5) << 'n';
你应该没事。