调用 basic_string::copy 没有匹配的函数

Posted

技术标签:

【中文标题】调用 basic_string::copy 没有匹配的函数【英文标题】:no matching function for call basic_string::copy 【发布时间】:2013-06-02 04:39:34 【问题描述】:

我对 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

【问题讨论】:

如果您查看一些文档或错误的其余部分,它会说它接受char *(或使用的任何字符串)。我建议使用substr 【参考方案1】:

引用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;

这会直接从构造函数中的 old 字符串创建 new 字符串,所以它更优雅一些。

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

另外,你需要使用:

strTuna = Cut(strHate, 7, 4)

代替:

strTuna = Cut(strHate, 8, 4)

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

【讨论】:

谢谢,basic_string::copy 被提及为 std::string 中的成员字符串,所以我只是假设它没有使用 c 样式的字符串。至于那个一点一点的错误,我们都会犯错误,不是吗?哈哈哈 是的,我自己也很惊讶 @KleptoKat,您必须记住,我们确实有 std::string::substr 可以复制到 std::stringstd::copy 可以复制到其中一个(以及更多),std::string::copy 可以复制到一个 C 字符串。我不确定为什么要实现最后一个,除非它使用memmove 或其他东西,但我们已经有了另外两个可以处理 C++ 字符串的东西。而我就是我,我忘记了构造函数也可以从一对迭代器中复制,所以对于 C++ 字符串来说还有 1 个,它提醒我 std::string::assign 也可以做到这一点。【参考方案2】:

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

string Cut(string &str, int nStart, int nLength)

  string strCopy = str.substr(nStart, nLength);
  str.erase(nStart, nLength);
  return strCopy;

【讨论】:

以上是关于调用 basic_string::copy 没有匹配的函数的主要内容,如果未能解决你的问题,请参考以下文章

遇见未来 | PostgreSQL:一匹即将发力的黑马

leofs 对象存储中一匹黑马

云图说|OLAP开源引擎的一匹黑马,MRS集群组件之ClickHouse

云图说|OLAP开源引擎的一匹黑马,MRS集群组件之ClickHouse

Vue为啥可以成为2019年的一匹黑马?

云图说丨OLAP开源引擎的一匹黑马,MRS集群组件之ClickHouse