错误 C2679 二进制“=”: 没有找到接受“const _Ty”类型的右操作数的运算符(或没有可接受的转换)的一种情况发生的错误
错误 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”类型的右操作数的运算符(或没有可接受的转换)的一种情况发生的错误相关推荐
- ERROR:C2678 二进制“<”: 没有找到接受“const _Ty”类型的左操作数的运算符(或没有可接受的转换)
[1]复现问题 为了更精确的分析,先用最简单的示例复现此错误场景,代码如下: #include <map> #include <string>struct Section {i ...
- C++ 没有找到接受const _Ty类型的左操作数的运算符
在使用STL中的count(const )算法时报错没有找到接受const _Ty类型的左操作数的运算符, 原因是 使用自己创建的双向链表类没有重载左运算符== ,添加上重载运算即可. bool op ...
- C2679 二进制 没有找到接受 std::string 类型的右操作数的运算符(或没有可接受的转换)
在VS上打代码,结果出现了上面这个错误 很奇怪,以前在其他IDE上这么写都没有问题,不知道为什么在VS写就出现了这个错误,我一开始以为是我的代码的问题.可是怎么想都没有想通. 甚至,我自己在main函 ...
- 【C++】c++编译错误-- C2678 二进制“=”: 没有找到接受“_Ty”类型的左操作数的运算符(或没有可接受的转换)
[C++]c++编译错误-- C2678 二进制"=": 没有找到接受"_Ty"类型的左操作数的运算符(或没有可接受的转换) 代码: //by 鸟哥 rever ...
- c++编译错误-- C2678 二进制“=”: 没有找到接受“_Ty”类型的左操作数的运算符(或没有可接受的转换)
代码: //by 鸟哥 reverse引起的编译错误 //有疑问请留言或加群 1032082534 #include<iostream> #include<algorithm> ...
- QT中QSet容器报错: error: C2678: 二进制“==”: 没有找到接受“const Key类型的左操作数的运算符。
该报错定位到qHash.h里.问题出在使用QSet存放了自定义的类. 解决方法:在类外重载(==)操作符和重写全局函数qHash. 具体如下: 头文件: //操作符重载(==) bool operat ...
- 二进制“==”: 没有找到接受“XX”类型的左操作数的运算符(或没有可接受的转换)
项目场景: 自定义数据结构,进行内存数据的一些遍历等(QList等存储) 问题描述 因为出现==无法找到可接受的转换,那么你一定会像我一样,找==符号,一个项目里==符号那么多,要找到对应的对象==, ...
- C2678 二进制“<“:没有找到接受“ const_Ty“类型的左操作数的运算符
C2678 二进制"<":没有找到接受" const_Ty"类型的左操作数的运算符 运行c++程序时遇到上述错误,点击VS中的错误后发现无法定位到错误所在 ...
- 短信通信的几种情况和CMS错误
1. 如何与GSM MODEM建立通信联系 2. 不能与GSM MODEM进行正常的通信或总是在仿真终端上出现乱码 3. 如何才能知道错误代码 4. 发送短消息后,收到出错信息+CMS ERROR 5 ...
最新文章
- centos7ftp服务器的搭建
- 如何做项目工作量估算
- 你好,弗朗索瓦丝·萨冈
- lambdas 排序_Java8 Lambdas:解释性能缺陷的排序
- linux socket默认超时时间设置,Socket中如何设置连接超时 (转)
- pandas整表写入excel指定位置_当Python遇到Excel,一个能打的都没有~
- DateTimePicker控件 1130
- jQuery框架学习第八天:ASP.NET jQuery实施方案
- 简易修复工具_汽车划痕的简单修复法,你get了吗?
- oracle数据库应用中实现汉字“同音”查询
- 软件工程 部分术语英文缩写
- php时间格式转换成时间戳,php怎么把时间格式转换为时间戳?
- 访问网络计算机提示0 80070035,win7访问局域网共享文件出现 0x80070035错误的解决办法...
- 微信openid存入数据库为空解决方案
- CVPR2021 | CVPR2021最全整理,CVPR2021下载链接,CVPR2021全部论文代码
- 【数据科学家学习小组】之统计学(第二期)第一周(20191028-20191103)-momi
- 【CF480D】Parcels DP
- 个人日记——用来激励自己
- 用PHP输出对称菱形的简易办法
- 初学者学python用什么软件,python编程入门软件