2012-03-14 4 views
4

integerクラスを変更中です(これは最新のコピーではありませんが、-std=c++0xで動作します)。 少しでもという問題が発生しました。単純な演算子のオーバーロードは、私が何をしても拒否します。このコード:operator = not workingの単純なオーバーロード

#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>に変更しましたが、それでも機能しません。

私には何が欠けていますか?

+1

さらに、代入演算子は値渡しではなりません。 –

+1

投稿に大文字がありません。 –

+1

整数を整数にキャストしようとしている場合(あなたがやっていると仮定)、代入演算子の代わりに整数をとるコピーコンストラクタを実装したいかもしれません。 –

答えて

6

いいえあなたは=演算子を使用していません。 =シンボルが存在しても、コンストラクタのみで初期化が行われます。一部の人々は、その理由のために、明確にするための構造型の初期化を好む:

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

だから、あなたはintを取ることができ、コンストラクタが必要です。それをマークすることを忘れないでくださいexplicit

さらに、代入演算子は参照を返さなければなりません。

4
integer a = 132; 

初期化です。 operator =ではなく、変換コンストラクタを呼び出します。

integer a; 
a = 132; 

は動作しますが、より良いコンストラクタを定義する必要があります

integer(int rhs){} 

operator =は、参照によって返すべきであることに注意してください。

関連する問題