加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

关于错误 C2679: 二进制“=”: 没有找到接受XXX类型的右操作数的运算符

(2013-03-26 11:50:15)
这次是在设计专用的迭代器时遇到,奇怪的是在Debug模式下没错,在Release模式下出错,后来翻阅中外网站,发现是在模板参数多于一个时,必须再提供一个默认的operator=重载,示例如下:

template<typename T1,typename T2>
class ex_insert: public iterator<output_iterator_tag,T2>
{
public:
explicit ex_insert(vector<T2>& dest):m_Dest(dest){}
ex_insert<T1,T2>& operator=(const T1& item)
{
m_Dest.push_back(item.name);
return(*this);
}

ex_insert<T1,T2>& operator=(const ex_insert<T1,T2>&){ return(*this); } //默认重载
ex_insert<T1,T2>& operator++(const int){ return(*this); }
ex_insert<T1,T2>& operator++(){ return(*this); }
ex_insert<T1,T2>& operator*(){ return(*this); }

protected:
vector<T2>& m_Dest;
};

关键就是上面带注释的那一行,加上它再编译就清净了。当然也可以什么都不做,如下:
void operator=(const ex_insert<T1,T2>&){}


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有