2012-03-14 49 views
4

我正在修改我的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>,但這也不起作用。

我錯過了什麼?

+1

此外,賦值運算符不應該按值返回。 – 2012-03-14 10:30:06

+1

您的帖子中缺少大寫字母。 – 2012-03-14 10:30:25

+1

如果您試圖將整型轉換爲整數(我假設您正在做),您可能需要實現一個採用int而不是賦值運算符的拷貝構造函數。 – 2012-03-14 10:41:51

回答

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 =應參考返回。