#2148. C++-编译-no match for 'xxx' (operand types are 'xxx' and 'xxx')
C++-编译-no match for 'xxx' (operand types are 'xxx' and 'xxx')
Background
Description
没有与这些操作数匹配的"xx"操作符
操作符指的是一些运算符,比如+、-、&&、>>、[]等
操作数是这些运算符所需要操作的对象,比如+运算需要有左右两个数,而++运算是对一个数操作的
出现这个错误一般是操作数的类型与操作符所要求的不匹配,比如(string类型需要<string>头文件):
1.使用系统的类时出错,或者尝试对不正确的类型进行运算符操作
比如:
string a="abc";
cout<<3+a; //将一个整数与一个string类型的变量相加,这是+运算不允许的
特别提一下,如果你的报错的对象是">>"、"<<",请检查你的使用是否规范(惨痛的教训),比如:
cin<<a; //正确的应为cin>>a;
cout>>3; //正确的应为cout<<3;
2.在使用自己定义的类时,尝试使用系统默认的运算符
比如:
class Integer{
public:
int a;
Integer(int aa):a(aa){}
};
Integer a(1),b(2);
cout<<a+b; //因为系统的+运算没有对自定义的类的运算方法
建议:
1.自己对+运算符进行运算符重载,,如:
class Integer{
public:
int a;
Integer(int aa):a(aa){}
friend const Integer operator+ (const Integer& a,const Integer& b); //声明友元
};
const Integer operator+ (const Integer& a,const Integer& b) { return(Integer(a.i+b.i)); }
Integer a(1),b(2);
Integer c=a+b;
cout<<c.a;
2.访问类中的变量,对类中变量单独进行+运算,如:
cout<<a.a+b.a;
Format
Input
Output
Samples
Limitation
1s, 1024KiB for each test case.