gpt4 book ai didi

c++ 没有匹配的构造函数?

转载 作者:行者123 更新时间:2023-11-30 02:39:19 25 4
gpt4 key购买 nike

我必须为大学项目创建一个自己的字符串类,到目前为止我的代码看起来像(我只显示相关部分):

class SuchString
{
char* str;
size_t siz;
public:
SuchString(char* a);
~SuchString();
SuchString(SuchString& a);
SuchString operator+(const SuchString& a) const;
...
...
};

如您所见,我有一个char* 类型的构造函数,实现为:

SuchString::SuchString(char* a)
{
siz = strlen(a);
str = new char[siz];
strcpy(str, a);
}

问题出在我的 operator+ 函数上:

SuchString SuchString::operator+(const SuchString &a) const
{
return SuchString(strcat(str, a.str));
}

我收到以下错误消息:

No matching constructor for initialization of 'SuchString'

据我所知,strcat 函数应该返回一个 char*,我有一个该类型的构造函数。

我收到以下相同的错误消息:

SuchString SuchString::operator+(const SuchString &a) const
{
char* lel = strcat(str, a.str);
return SuchString(lel);
}

同样的事情又发生了。我预计代码 SuchString(lel) 会创建一个临时变量,因此函数可以随它一起返回,就像前面的示例一样。

感谢任何帮助。

ps:我知道创建这样的字符串类绝对是胡说八道,但这是大学的一些小项目。

最佳答案

SuchString(SuchString& a); 将非 const 引用作为参数,因此临时传递它是不可行的。你可能想要的是

SuchString(const SuchString& a);

因为当您按值返回时,会生成一个拷贝 - 即:

return SuchString(lel);

将创建一个临时的 SuchString,然后将其复制并返回。理论上,因为在实践中拷贝很可能被优化掉。

关于c++ 没有匹配的构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29893211/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com