C++ SUB方法——“非成员函数中的”这个“无效用法”

C++ SUB方法——“非成员函数中的”这个“无效用法”,c++,this,substr,C++,This,Substr,我试图编译以下代码 std::string key = "DISTRIB_DESCRIPTION="; std::cout << "last five characters: " << key.substr(this.end()-5) << '\n'; 在substr的第二次使用中,字符串没有名称,因此引用它的唯一方法是这样。我用一根绳子把它修好了 std::cout << "Description: " << line.substr

我试图编译以下代码

std::string key = "DISTRIB_DESCRIPTION=";
std::cout << "last five characters: " << key.substr(this.end()-5) << '\n';
在substr的第二次使用中,字符串没有名称,因此引用它的唯一方法是这样。我用一根绳子把它修好了

std::cout << "Description: " << line.substr(found+key.length()+1,line.length()-found-key.length()-2) << '\n';
但我现在很好奇为什么这不起作用。

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

此外,string.substr采用一个整数表示起始位置。end返回一个迭代器,该迭代器将不起作用。您可能需要在这里调用string.length

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

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

<>你应该没事。

你真的需要读一本关于C++的书。我投票把这个问题关在题外,因为OP需要一本书,而不是一个问题。我认为我们不应该踢初学者。奥普迷失在他需要去的地方。我认为正是如此,这样的答案才有一席之地。该问题是根据SO的指导原则提出的,可供将来的问题参考。我建议我们保持它的开放性。最重要的是,substr采用索引,而不是迭代器。
std::cout << "Description: " << line.substr(found+key.length()+1,line.length()-found-key.length()-2) << '\n';
std::cout << "last five characters: " << key.substr(key.length()-5) << '\n';