擦除功能给出了无效参数的错误,但我已经通过了
第一个参数 =索引编号 第二个参数 =否。字符
然后它也给出了错误。 的例如
word3 = word2.erase(word.begin(), word.length()/2-1);
答案 0 :(得分:2)
查看http://en.cppreference.com/w/cpp/string/basic_string/erase(1),您会看到需要传递第一个字符的 index 以及要删除的字符数。您将迭代器作为第一个参数传递。只是做
word3 = word2.erase(0, word.length()/2 -1);
// ^^^^
// this should probably be word2
或使用接受范围的(3)重载:
word3 = word2.erase(word2.begin(), std::next(word2.begin(), word2.length()/2 -1));
我也相信你应该在word2
内erase
,而不是word
。
答案 1 :(得分:0)
类begin()
的成员函数std::string
返回迭代器。这是它的返回类型std::string::iterator
或std::string::const_iterator
。
您正在尝试使用参数类型为erase
的成员函数std::string::size_type
:
basic_string& erase(size_type pos = 0, size_type n = npos);
如果你想使用这个成员函数,你应该像
一样编写调用word2.erase( 0, word.length()/2 - 1 )
如果要使用使用以下成员函数的迭代器的函数
iterator erase(const_iterator first, const_iterator last);
然后电话看起来像
word2.erase( word.begin(), std::next( word.begin(), word.length()/2 - 1 ) )
或只是
word2.erase( word.begin(), word.begin() + word.length()/2 - 1 )
我希望这不是一个错字,你调用名为word2
的对象的函数,而在用作参数的表达式中,你使用名为word
的对象