错误:不匹配'运营商=' (操作数类型是' PlDrustvo'和' PlDrustvo')|

时间:2017-06-13 21:57:21

标签: c++

我正在为大学编写代码而且我坚持了一项任务。它说, "错误:'运算符' ="不匹配,但我已经超载了' ='所以我无法找到问题。有人可以帮助我吗? 感谢

代码是:

instance IArray UArray Bool where
    ...
    unsafeAt (UArray _ _ _ arr#) (I# i#) = isTrue#
        ((indexWordArray# arr# (bOOL_INDEX i#) `and#` bOOL_BIT i#)
        `neWord#` int2Word# 0#)

1 个答案:

答案 0 :(得分:1)

PlDrustvo& operator=(PlDrustvo &p){

应该是

PlDrustvo& operator=(PlDrustvo const &p){

确切的错误消息是:

  

错误:无法绑定“PlDrustvo&”类型的非常量左值引用到'PlDrustvo'类型的右值

求和操作的返回值是类型PlDrustvo的临时值,临时值不​​能绑定到非const引用,因此编译器无法将求和表达式的结果传递给复制赋值运算符。解决方案是让operator=接受一个const引用,无论如何它更有意义,因为它不会修改参数。

通过此更改,your code compiles

通常,您的程序缺乏const正确性。以下是我发现的所有其他常见问题:

/* bad  */ PlDrustvo(char *ime, int turi, int brclenovi){
/* good */ PlDrustvo(char const *ime, int turi, int brclenovi){

/* bad  */ PlDrustvo(PlDrustvo &p){
/* good */ PlDrustvo(PlDrustvo const &p){

/* bad  */ PlDrustvo operator+(PlDrustvo &c) {
/* good */ PlDrustvo operator+(PlDrustvo const &c) const {

/* bad  */ bool operator>(PlDrustvo &p){
/* good */ bool operator>(PlDrustvo const &p){

/* bad  */ bool operator<(PlDrustvo &p){
/* good */ bool operator<(PlDrustvo const &p){

/* bad  */ friend ostream& operator<<(ostream &alek, PlDrustvo &p){
/* good */ friend ostream& operator<<(ostream &alek, PlDrustvo const &p){

/* bad  */ friend void najmnoguClenovi(PlDrustvo*, int);
/* good */ friend void najmnoguClenovi(PlDrustvo const*, int);

/* bad  */ void najmnoguClenovi(PlDrustvo *pl,int n){
/* good */ void najmnoguClenovi(PlDrustvo const *pl,int n){