我对C ++很陌生,并且已经习惯了一段时间。如果对这些错误有任何见解,我将非常感激。以下程序应产生以下结果:
#include <iostream>
#include <string>
using namespace std;
string Cut(string &strString, int nStart, int nLength)
{
string strCopy;
strString.copy(strCopy, nLength, nStart);
strString.erase(nStart, nLength);
return strCopy;
}
int main()
{
string strHate = "I hate tuna.";
cout << strHate << endl;
string strTuna;
strTuna = Cut(strHate, 8, 4);
cout << strHate << endl;
cout << strTuna << endl;
}
应该产生
I hate tuna.
I hate .
tuna
然而,我收到此错误消息:
9|error: no matching function for call to 'std::basic_string<char>::copy(std::string&, int&, int&)'
非常感谢,
KleptoKat
答案 0 :(得分:2)
在引用here时,函数std::string.copy
采用char *
类型的参数,您已为其指定了string
类型的参数
这是一个更好的解决方案:
string Cut(string &strString, int nStart, int nLength){
string strCopy (strString, nStart, nLength);
strString.erase(nStart, nLength);
return strCopy;
}
这将直接从构造函数中创建旧字符串中的 new 字符串,因此它更加优雅。
只是您知道为什么发生了错误,变量的数据类型(int
,char
,string
等)必须与函数期望接收的数据类型。如果您不知道函数期望接收哪些数据类型,您可以随时在Google上查找。
此外,您需要使用:
strTuna = Cut(strHate, 7, 4)
而不是:
strTuna = Cut(strHate, 8, 4)
这是因为字符串的第一个字符的位置为0
而不是1
。
答案 1 :(得分:1)
在您的情况下使用string::substr
可能更合适:
string Cut(string &str, int nStart, int nLength)
{
string strCopy = str.substr(nStart, nLength);
str.erase(nStart, nLength);
return strCopy;
}