2

我对 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&)'

非常感激,

窃贼

4

2 回答 2

2

正如这里所引用的,该函数std::string.copy接受一个类型的参数char *,你已经给它一个类型的参数string

这是一个更好的解决方案:

string Cut(string &strString, int nStart, int nLength){
    string strCopy (strString, nStart, nLength);
    strString.erase(nStart, nLength);
    return strCopy;
}

这直接从构造函数从旧字符串创建字符串,所以它更优雅一点。

为了让您知道错误发生的原因,变量的数据类型(intcharstring等)必须与函数期望接收的数据类型相匹配。如果您不知道函数期望接收的数据类型,您可以随时在 Google 上查找。

此外,您需要使用:

strTuna = Cut(strHate, 7, 4)

代替:

strTuna = Cut(strHate, 8, 4)

这是因为字符串的第一个字符的位置是 ,0而不是1

于 2013-06-02T04:48:47.290 回答
1

在您的情况下使用string::substr可能更合适:

string Cut(string &str, int nStart, int nLength)
{
  string strCopy = str.substr(nStart, nLength);
  str.erase(nStart, nLength);
  return strCopy;
}
于 2013-06-02T04:55:03.000 回答