错误 C2679 二进制“=”: 没有找到接受“const _Ty”类型的右操作数的运算符(或没有可接受的转换

记录一下自己写代码出现的错误。

问题

写关于复数的模板类时出现了这样的报错

错误 C2679 二进制“=”: 没有找到接受“const _Ty”类型的右操作数的运算符(或没有可接受的转换)

开始的代码如下:

#include<iostream>
#include<vector>
#include<iterator>
#include<algorithm>using namespace std;template<typename T>
class Complex {public:Complex() = default;Complex(T a, T b):real(a),imag(b){  }bool operator< (const Complex<T>& obj) {return ((real * real + imag * imag) < (obj.real * obj.real + obj.imag * obj.imag)) ? true : false;}Complex<T>& operator=(const Complex<T>& obj);friend ostream& operator << <>(ostream& os,const Complex<T>& obj);friend istream& operator >> <>(istream& in,Complex<T>& obj);void assign(T re, T im);private:T real = 0;T imag = 0;
};template<typename T>
istream& operator >> (istream& in, Complex<T>& obj)
{in >> obj.real;in>> obj.imag;return in;
}template<typename T>
ostream& operator<<(ostream& os, const Complex<T>& obj)
{if (obj.real != 0) {os << obj.real;if (obj.imag != 0)os << " + " << obj.imag << "i" << endl;}else if (obj.imag != 0) {os << obj.imag << "i" << endl;}else {os << "0" << endl;}return os;
}template<typename T>
Complex<T>& Complex<T>::operator=(const Complex<T>& obj)
{real = obj.real;imag = obj.imag;return *this;
}template<typename T>
void Complex<T>::assign(T re, T im)
{real = re;imag = im;
}int main() {vector<Complex<int>> complex;istream_iterator<int> in(cin);istream_iterator<int> end_iter;while(in!=end_iter) {int re, im;re = *in++;im = *in++;complex.push_back(Complex<int>(re,im));}sort(complex.begin(), complex.end());copy(complex.begin(), complex.end(), ostream_iterator<Complex<int>>(cout, "\n"));system("pause");
}

程序可以正常运行,这里是直接用循环读取然后赋值的,然后我想试一下用copy这个函数来直接读取进复数complex里。于是直接把这赋值语句注释掉然后用copy语句替代。main函数如下:

int main() {vector<Complex<int>> complex;istream_iterator<int> in(cin);istream_iterator<int> end_iter;//while(in!=end_iter) {// int re, im;//   re = *in++;//    im = *in++;//    complex.push_back(Complex<int>(re,im));//}copy(in, end_iter, back_inserter(complex));sort(complex.begin(), complex.end());copy(complex.begin(), complex.end(), ostream_iterator<Complex<int>>(cout, "\n"));system("pause");
}

然后运行就会出现此报错

然后也一直也没找到哪里出错了,只知道是这个copy语句这无法正常进行,一直在上面类里找是不是重载有些问题。
最后解决发现,copy语句没有写错,其他构造也没有出错。错误出在

 istream_iterator<int> in(cin);istream_iterator<int> end_iter;

这里选择模板类型时应该是Complex而不是int,需要改过来,所以出现了无法匹配=的情况,无法将int的数据直接赋值给Complex。
修改后代码如下:

#include<iostream>
#include<vector>
#include<iterator>
#include<algorithm>using namespace std;template<typename T>
class Complex {public:Complex() = default;Complex(T a, T b):real(a),imag(b){  }bool operator< (const Complex<T>& obj) {return ((real * real + imag * imag) < (obj.real * obj.real + obj.imag * obj.imag)) ? true : false;}Complex<T>& operator=(const Complex<T>& obj);friend ostream& operator << <>(ostream& os,const Complex<T>& obj);friend istream& operator >> <>(istream& in,Complex<T>& obj);void assign(T re, T im);private:T real = 0;T imag = 0;
};template<typename T>
istream& operator >> (istream& in, Complex<T>& obj)
{in >> obj.real;in>> obj.imag;return in;
}template<typename T>
ostream& operator<<(ostream& os, const Complex<T>& obj)
{if (obj.real != 0) {os << obj.real;if (obj.imag != 0)os << " + " << obj.imag << "i" << endl;}else if (obj.imag != 0) {os << obj.imag << "i" << endl;}else {os << "0" << endl;}return os;
}template<typename T>
Complex<T>& Complex<T>::operator=(const Complex<T>& obj)
{real = obj.real;imag = obj.imag;return *this;
}template<typename T>
void Complex<T>::assign(T re, T im)
{real = re;imag = im;
}int main() {vector<Complex<int>> complex;istream_iterator<Complex<int>> in(cin);istream_iterator<Complex<int>> end_iter;//while(in!=end_iter) {// int re, im;//   re = *in++;//    im = *in++;//    complex.push_back(Complex<int>(re,im));//}copy(in, end_iter, back_inserter(complex));sort(complex.begin(), complex.end());copy(complex.begin(), complex.end(), ostream_iterator<Complex<int>>(cout, "\n"));system("pause");
}

程序可以正常运行

错误 C2679 二进制“=”: 没有找到接受“const _Ty”类型的右操作数的运算符(或没有可接受的转换)的一种情况发生的错误相关推荐

  1. ERROR:C2678 二进制“<”: 没有找到接受“const _Ty”类型的左操作数的运算符(或没有可接受的转换)

    [1]复现问题 为了更精确的分析,先用最简单的示例复现此错误场景,代码如下: #include <map> #include <string>struct Section {i ...

  2. C++ 没有找到接受const _Ty类型的左操作数的运算符

    在使用STL中的count(const )算法时报错没有找到接受const _Ty类型的左操作数的运算符, 原因是 使用自己创建的双向链表类没有重载左运算符== ,添加上重载运算即可. bool op ...

  3. C2679 二进制 没有找到接受 std::string 类型的右操作数的运算符(或没有可接受的转换)

    在VS上打代码,结果出现了上面这个错误 很奇怪,以前在其他IDE上这么写都没有问题,不知道为什么在VS写就出现了这个错误,我一开始以为是我的代码的问题.可是怎么想都没有想通. 甚至,我自己在main函 ...

  4. 【C++】c++编译错误-- C2678 二进制“=”: 没有找到接受“_Ty”类型的左操作数的运算符(或没有可接受的转换)

    [C++]c++编译错误-- C2678 二进制"=": 没有找到接受"_Ty"类型的左操作数的运算符(或没有可接受的转换) 代码: //by 鸟哥 rever ...

  5. c++编译错误-- C2678 二进制“=”: 没有找到接受“_Ty”类型的左操作数的运算符(或没有可接受的转换)

    代码: //by 鸟哥 reverse引起的编译错误 //有疑问请留言或加群 1032082534 #include<iostream> #include<algorithm> ...

  6. QT中QSet容器报错: error: C2678: 二进制“==”: 没有找到接受“const Key类型的左操作数的运算符。

    该报错定位到qHash.h里.问题出在使用QSet存放了自定义的类. 解决方法:在类外重载(==)操作符和重写全局函数qHash. 具体如下: 头文件: //操作符重载(==) bool operat ...

  7. 二进制“==”: 没有找到接受“XX”类型的左操作数的运算符(或没有可接受的转换)

    项目场景: 自定义数据结构,进行内存数据的一些遍历等(QList等存储) 问题描述 因为出现==无法找到可接受的转换,那么你一定会像我一样,找==符号,一个项目里==符号那么多,要找到对应的对象==, ...

  8. C2678 二进制“<“:没有找到接受“ const_Ty“类型的左操作数的运算符

    C2678 二进制"<":没有找到接受" const_Ty"类型的左操作数的运算符 运行c++程序时遇到上述错误,点击VS中的错误后发现无法定位到错误所在 ...

  9. 短信通信的几种情况和CMS错误

    1. 如何与GSM MODEM建立通信联系 2. 不能与GSM MODEM进行正常的通信或总是在仿真终端上出现乱码 3. 如何才能知道错误代码 4. 发送短消息后,收到出错信息+CMS ERROR 5 ...

最新文章

  1. centos7ftp服务器的搭建
  2. 如何做项目工作量估算
  3. 你好,弗朗索瓦丝·萨冈
  4. lambdas 排序_Java8 Lambdas:解释性能缺陷的排序
  5. linux socket默认超时时间设置,Socket中如何设置连接超时 (转)
  6. pandas整表写入excel指定位置_当Python遇到Excel,一个能打的都没有~
  7. DateTimePicker控件 1130
  8. jQuery框架学习第八天:ASP.NET jQuery实施方案
  9. 简易修复工具_汽车划痕的简单修复法,你get了吗?
  10. oracle数据库应用中实现汉字“同音”查询
  11. 软件工程 部分术语英文缩写
  12. php时间格式转换成时间戳,php怎么把时间格式转换为时间戳?
  13. 访问网络计算机提示0 80070035,win7访问局域网共享文件出现 0x80070035错误的解决办法...
  14. 微信openid存入数据库为空解决方案
  15. CVPR2021 | CVPR2021最全整理,CVPR2021下载链接,CVPR2021全部论文代码
  16. 【数据科学家学习小组】之统计学(第二期)第一周(20191028-20191103)-momi
  17. 【CF480D】Parcels DP
  18. 个人日记——用来激励自己
  19. 用PHP输出对称菱形的简易办法
  20. 初学者学python用什么软件,python编程入门软件

热门文章

  1. 浅谈JVM(面试常考)
  2. 经济危机下我国玩具业现状与前景
  3. html手机上传图片去除拍照,HTML5手机拍照上传
  4. python 资源站_python资源
  5. 石油大学专升本计算机课程-计算机应用基础(1)
  6. 揭秘篇:架构腐化之谜
  7. POJ 1364 King 差分约束系统
  8. 用lxml的xpath演示爬虫提取笑话集网页其中的标题,url,浏览数,日期,笑话内容
  9. LED圆柱屏、波浪屏、飘带屏等异形屏是由柔性软模组构成的创意LED显示屏
  10. 【微信小程序入门到精通】— 配置合法域名、进行网络数据请求(GET、POST)