c ++没有匹配的构造函数?

时间:2015-04-27 10:30:06

标签: c++ string class constructor

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

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:我知道创建像这样的字符串类绝对是胡说八道,但这是一个适合大学的小项目。

1 个答案:

答案 0 :(得分:3)

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

SuchString(const SuchString& a);

因为按价值返回时,会复制一份 - 即:

return SuchString(lel);

将创建一个临时SuchString,然后复制并返回。从理论上讲,因为在实践中,副本很可能已经过优化。