неверная инициализация ссылки типа для класса WholeNumbers - PullRequest
2 голосов
/ 31 октября 2019

Я пытаюсь написать класс с именем WholeNumber. Я еще не закончил писать, мне нравится пытаться часто компилировать, чтобы я мог держать ошибки на низком уровне и управлять ими. Когда я собираюсь скомпилировать класс как есть, я получаю эту ошибку:

fibonacci.cpp: в функции-члене 'std :: __cxx11 :: list & WholeNumber :: operator = (WholeNumber &)': fibonacci.cpp:41:14: ошибка: неверная инициализация ссылки типа 'std :: __ cxx11 :: list &' из выражения типа 'WholeNumber' return * this;

Я попытался найти ошибку, чтобы увидеть,Я мог бы найти ответы на мою проблему, но я мог только обнаружить, что вы не можете инициализировать неконстантную ссылку из константной ссылки. Я не понимаю, что это может быть со ссылкой на мой код. Чего мне не хватает?

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

};

1 Ответ

1 голос
/ 31 октября 2019

Возвращенный тип оператора назначения копирования: 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 & );
...