class WholeNumbers 类型引用的无效初始化

invalid initialization of reference of type for class WholeNumbers

我正在尝试写出一个名为 WholeNumber 的 class。我还没有写完它,我喜欢尝试经常编译,这样我就可以保持低错误和可管理的错误。当我按原样编译 class 时,出现此错误:

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

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

#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;
   }

};

复制赋值运算符的返回类型为list <int> &

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

但是返回了类型为 WholeNumber (*this) 的对象,并且没有从一种类型到另一种类型的隐式转换。

也许你的意思是下面的

   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 & );