简单的运算符重载=无法正常工作

时间:2012-03-14 10:27:47

标签: c++ compiler-errors operator-overloading

我正在修改我的integer课程(这不是我最新的副本,但它适用于-std=c++0x)。我遇到了一个轻微的问题:无论我做什么,简单的操作符重载都会拒绝工作。这段代码:

#include <deque>
#include <iostream>
#include <stdint.h>

class integer{
    private:
        std::deque <uint8_t> value;

    public:
        integer(){}

        integer operator=(int rhs){
            return *this;
        }
};

int main() {
        integer a = 132;        
        return 0;
}

给了我:error: conversion from ‘int’ to non-scalar type ‘integer’ requested,但这不是重载operator=的重点吗?我已将int部分更改为template <typename T>,但这也无效。

我错过了什么?

2 个答案:

答案 0 :(得分:6)

没有。你根本没有使用=运营商;即使存在=符号,也只能使用构造函数进行初始化。出于这个原因,有些人更喜欢构造型初始化:

T a = 1;    // ctor
T b(2);     // ctor
T c; c = 3; // ctor then op=

因此,您需要一个可以使用int的构造函数。不要忘记将其标记为explicit

此外,顺便说一句,赋值运算符应返回引用。

答案 1 :(得分:4)

integer a = 132; 

是初始化。它调用转换构造函数,而不是operator =

integer a;
a = 132; 

应该可以工作,但最好定义构造函数:

integer(int rhs){}

另请注意,operator =应通过引用返回。