我有一个只有一个字段的类。我想重载=操作符,以便可以将字符串直接分配给类的成员str。这是我的例子,但是编译器说cannot convert from const char[10] to strtype,我想问为什么会这样呢?
#include <iostream>
#include <string>
using namespace std;
class strtype {
    string str;
public:
    strtype()
    {
        str = "Test";
    }
    strtype(string ss)
    {
        str = ss;
    }
    strtype operator= (strtype &st)
    {
        strtype tmp;
        tmp.str = st.str;
        return tmp;
    }
};
int main()
{
    strtype d = "NEWSPAPER";
}发布于 2018-10-06 23:56:00
为
strtype d=“报纸”;
要工作,您必须提供一个以char const*作为参数的构造函数。
另外,使用构造函数的初始化列表来初始化成员变量,而不是在构造函数主体中进行赋值:
class strtype {
    string str;
public:
    strtype()
    : str{ "Test" }
    {}
    strtype(string ss)
    : str{ ss }
    {}
    strtype(char const *ss)
    : str{ ss }
    {}
    strtype& operator=(strtype const &st)  // *)
    {
        str = st.str;
        return *this;
    }
};*)赋值操作符通常应该接受对const的引用,也应该返回对对象的引用。
发布于 2018-10-07 00:00:43
首先,您的运算符应该将const-reference作为参数:
strtype operator= (const strtype &st)其次,赋值运算符需要的是strtype而不是const char*。因此,只需为此重载另一个运算符:
strtype& operator= (const char* c) {
    str = c;
    return *this;
}您还希望更改第一个运算符的内容,如下所示:
strtype& operator= (const strtype &st) {
        str = st.str;
        return *this;
    }这一点很重要,因此当使用赋值运算符将新值赋给strtype对象时,您希望它更改这些值,而不是创建新的值。这不会有什么效果。返回值就在那里,以防您链接多个赋值,因此它可以使用一个赋值的结果放入下一个赋值中。
https://stackoverflow.com/questions/52680748
复制相似问题