我必须为大学项目创建一个自己的字符串类,到目前为止我的代码看起来像(我只显示相关部分):
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));
}
我收到以下错误消息:
没有用于初始化' SuchString'
的匹配构造函数
据我所知,strcat
函数应返回char*
,我有一个该类型的构造函数。
我收到以下相同的错误消息:
SuchString SuchString::operator+(const SuchString &a) const
{
char* lel = strcat(str, a.str);
return SuchString(lel);
}
同样的事情发生了。我希望代码SuchString(lel)
会创建一个临时变量,所以函数可以随之返回,就像前面的例子一样。
感谢任何帮助。
ps:我知道创建像这样的字符串类绝对是胡说八道,但这是一个适合大学的小项目。
答案 0 :(得分:3)
SuchString(SuchString& a);
将非const
引用作为参数,因此传递临时值是不可行的。您可能想要的是
SuchString(const SuchString& a);
因为按价值返回时,会复制一份 - 即:
return SuchString(lel);
将创建一个临时SuchString
,然后复制并返回。从理论上讲,因为在实践中,副本很可能已经过优化。