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