Простая перегрузка оператора = не работает - PullRequest
4 голосов
/ 14 марта 2012

Я нахожусь в процессе изменения моего 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 ]

6 голосов
/ 14 марта 2012

Нет. Вы вообще не используете оператор =; даже если присутствует символ =, инициализация выполняется только с помощью конструкторов. Некоторые люди предпочитают инициализацию типа конструкции для ясности по этой причине:

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

Итак, вам нужен конструктор, который может принимать int. Не забудьте отметить это explicit.

Кроме того, кстати, оператор присваивания должен возвращать ссылку.

4 голосов
/ 14 марта 2012
integer a = 132; 

Это инициализация.Он вызывает конструктор преобразования, не operator =.

integer a;
a = 132; 

должен работать, но лучше определить конструктор:

integer(int rhs){}

Также обратите внимание, что operator = должен возвращаться по ссылке.

...