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

标签 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));
}

我收到以下错误消息:

No matching constructor for initialization of '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,然后将其复制并返回。理论上,因为在实践中拷贝很可能被优化掉。

关于c++ 没有匹配的构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29893211/

相关文章:

c++ - QT 版本、工具包和编译器

java - 字符串中的换行符检测

c++ - 将 const char* 添加到 string_view

C++ 嵌套类方法

Python 更新类变量

c++ - move 构造函数和静态数组

c++ - Poco 在 SMTPClientSession.login 后停止

c++ - 如何输入一个以\n为分隔符的字符串数组?

将 char* 字符串转换为十六进制 uint16

非模板类中任意类型的C++成员变量