C++ c++;没有匹配的构造函数?
我必须为一个大学项目创建一个自己的字符串类,到目前为止我的代码如下(我只显示相关部分): 如您所见,我有一个用于C++ c++;没有匹配的构造函数?,c++,string,class,constructor,C++,String,Class,Constructor,我必须为一个大学项目创建一个自己的字符串类,到目前为止我的代码如下(我只显示相关部分): 如您所见,我有一个用于char*类型的构造函数,实现为: SuchString::SuchString(char* a) { siz = strlen(a); str = new char[siz]; strcpy(str, a); } 问题在于我的操作员+功能: SuchString SuchString::operator+(const SuchString &a) c
char*
类型的构造函数,实现为:
SuchString::SuchString(char* a)
{
siz = strlen(a);
str = new char[siz];
strcpy(str, a);
}
问题在于我的操作员+
功能:
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:我知道创建这样的字符串类绝对是胡说八道,但这是大学的一个小项目。SuchString(SuchString&a)
将非常量
引用作为参数,因此传递它是不可行的。你可能想要的是
SuchString(const SuchString& a);
因为当您按值返回时,会生成一个副本,即:
return SuchString(lel);
将创建一个临时
字符串,然后复制并返回该字符串。从理论上讲,这是因为在实践中,副本很可能被优化了。注意char*
构造函数中的局部变量-您的成员变量未初始化。还要注意操作符+
,它修改了它的左参数并溢出了分配。谢谢,我真的不知道为什么我要这样做str=new char[siz]代码>应该是str=newchar[siz+1]
对于在我的类中有大小变量的空字符,为什么需要“\0”转义字符?另外,当从控制台填充字符数组时,这样我就不需要在输入的末尾添加“\0”。我唯一应该注意的是文字字符串中的“\0”(const char*),因为在这种情况下它会自动添加。如果我错了,请纠正我。
return SuchString(lel);