所以我试图做一个简单地重载许多运算符的程序,但是由于某种原因,每当我尝试重载赋值运算符时,我都会看到一条错误消息:


  错误:请求从'int'转换为非标量类型'Foo'


    class Foo {
        int value;
    public:
        operator int() const;
        Foo& operator=(const int &val) { value = val; return this; }
        ...
    };
    int main()
    {
        Foo a = 8, b = 9;
        ...
        return 0;
    }


我也尝试了没有operator =语句,也没有操作符int()const的方法。声明,但我似乎无法将其编译。

最佳答案

您已经将分配与初始化混淆了。

Foo f = 1; //initialization
f = 2; //assignment


您还需要构造一个也接受int的构造函数。

Foo(int i) : value(i) {}

//main

Foo f = 1; //uses constructor


因为它是一个单参数构造函数(转换构造函数),所以如果您不希望int隐式转换为Foo,则应将构造函数设为explicit

关于c++ - 我如何重载赋值运算符,以使我的类等于基本类型,例如“int”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35679277/

10-12 07:36
查看更多