关于错误 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>&){}
前一篇:阳春白雪

加载中…