我正在为大学编写代码而且我坚持了一项任务。它说, "错误:'运算符' ="不匹配,但我已经超载了' ='所以我无法找到问题。有人可以帮助我吗? 感谢
代码是:
instance IArray UArray Bool where
...
unsafeAt (UArray _ _ _ arr#) (I# i#) = isTrue#
((indexWordArray# arr# (bOOL_INDEX i#) `and#` bOOL_BIT i#)
`neWord#` int2Word# 0#)
答案 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){