#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.