C ++ substr方法 - "在非成员函数中无效使用'this'"

时间:2016-05-23 13:50:39

标签: c++ this substr

我尝试编译以下代码

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是&#34;公共成员函数&#34; 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无法工作。

1 个答案:

答案 0 :(得分:4)

this仅在您将代码编写为类的非静态方法的一部分时才可用。在您的特定情况下,您似乎很明显this应该引用key,但编译器没有理由这样做。

此外,string.substr()采用一个表示开始位置的整数。 string.end()返回一个迭代器,它不起作用。你可能想要做的是调用string.length()。

只需将第一段代码替换为:

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

你应该没事。