C++ 没有匹配的构造函数

c++ no matching constructor?

本文关键字:构造函数 C++      更新时间:2023-10-16

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

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:我知道创建这样的字符串类绝对是无稽之谈,但这是大学的一些小项目。

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

SuchString(const SuchString& a);

因为当您按值返回时,会创建一个副本 - 即:

return SuchString(lel);

将创建一个临时SuchString,然后将其复制并返回。从理论上讲,这是因为在实践中,副本很可能被优化出来。