我正在修改我的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>
,但这也无效。
我错过了什么?
答案 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 =
应通过引用返回。