C++ 类WholeNumber的类型的引用初始化无效

C++ 类WholeNumber的类型的引用初始化无效,c++,class,operator-overloading,operators,definition,C++,Class,Operator Overloading,Operators,Definition,我正在写一个叫做WholeNumber的课程。我还没有写完它,我喜欢尝试频繁地编译,这样我就可以把错误控制得很低并且易于管理。当我按原样编译该类时,会出现以下错误: fibonacci.cpp:在成员函数“std::u cxx11::list&WholeNumber::operator=(WholeNumber&)”中: fibonacci.cpp:41:14:错误:从类型为“WholeNumber”的表达式初始化类型为“std::u cxx11::list&”的引用无效 归还*这个 我试图查找

我正在写一个叫做WholeNumber的课程。我还没有写完它,我喜欢尝试频繁地编译,这样我就可以把错误控制得很低并且易于管理。当我按原样编译该类时,会出现以下错误:

fibonacci.cpp:在成员函数“std::u cxx11::list&WholeNumber::operator=(WholeNumber&)”中: fibonacci.cpp:41:14:错误:从类型为“WholeNumber”的表达式初始化类型为“std::u cxx11::list&”的引用无效 归还*这个

我试图查找错误,看看是否可以找到问题的答案,但我只能发现无法从常量引用初始化非常量引用。我不明白这可能是指我的代码。我错过了什么

#include <iostream>
#include "fibonacci.h"   // for fibonacci() prototype                                                                                                     
#include <list>
#include <vector>
using namespace std;

class WholeNumber
{
private:
   list <int>  digits;

public:
   //default constructor                                                                        
   WholeNumber() { }
   //non-default constructor                                                                    
   WholeNumber(unsigned int number) {number = 0;}
   //copy constructor                                                                           
   WholeNumber(const WholeNumber & rhs) { }
   //destructor                                                                                 
   ~WholeNumber() { }


   friend ostream & operator << (ostream & out, const list <int> * l);
   istream &  operator >> (istream & in);
    WholeNumber & operator +=(const WholeNumber & rhs);

   list <int> & operator = (WholeNumber & rhs)
   {
      this->digits = rhs.digits;
      return *this;
   }

};

#包括
#包括“fibonacci.h”//for fibonacci()原型
#包括
#包括
使用名称空间std;
类整数
{
私人:
列出数字;
公众:
//默认构造函数
WholeNumber(){}
//非默认构造函数
WholeNumber(无符号整数){number=0;}
//复制构造函数
WholeNumber(常量WholeNumber&rhs){}
//析构函数
~WholeNumber(){}
friend ostream&operator>(istream&in);
整数和运算符+=(常数整数和rhs);
列表和运算符=(整数和rhs)
{
此->数字=rhs.数字;
归还*这个;
}
};

复制分配运算符的返回类型为
列表&

还有这些运营商

   friend ostream & operator << (ostream & out, const list <int> * l);
   istream &  operator >> (istream & in);

SomeClass::operator=
通常返回
SomeClass&
。为什么您要尝试返回对不相关类型的引用?无论如何,
return
语句中的表达式类型与声明的函数返回类型不匹配。谢谢您的输入。这是给我的伪代码:+assign(rhs:WholeNumber):list。我就是这样解释的。你认为应该用不同的方式写吗?@Igor TandetnikWell,如果您愿意,您可以使用
operator=
return
list&
,尽管这是非常不寻常的。或者,您可以使用一个名为
assign
的成员函数,如果您打算从字面上解释它,它似乎与伪代码更加匹配。无论如何,您的
return
语句应该修改为实际返回
list
类型的对象,而不是
WholeNumber
。我明白您的意思@Igor Tandetnik。谢谢你帮我澄清。@Megan你知道用户定义的赋值运算符对你的类来说是完全不必要的吗?编译器的默认版本非常好,无需重写即可正常工作。感谢您的输入。这是给我的伪代码:+assign(rhs:WholeNumber):list。我就是这样解释的。你认为应该用不同的方式写吗@弗拉德Moscow@Megan我敢肯定。在这种情况下,您可以像obj1=obj2=obj3这样编写;你的意思是这样的:这个->数字=Wholenumberdigits=rhs.digits?@Megan是的,我肯定。
   WholeNumber & operator = ( const WholeNumber & rhs )
   {
      this->digits = rhs.digits;
      return *this;
   }
   friend ostream & operator << (ostream & out, const list <int> * l);
   istream &  operator >> (istream & in);
   friend ostream & operator << (ostream & out, const WholeNumber & );
   friend istream &  operator >> ( istream & in, WholeNumber & );