Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;没有匹配的构造函数?_C++_String_Class_Constructor - Fatal编程技术网

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);