Ошибка: неверная инициализация неконстантной ссылки типа '.. &' из временного типа '… * const'

0

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

BinStabloMapa<string,string> m;
string s1("Sarajevo"), s2("Zagreb");
m[s1] = "BiH";
m[s2] = "Hrvatska";
{
    BinStabloMapa<string,string> m2(m);
    BinStabloMapa<string,string> m3;
    m3=m;
    m.obrisi(s1);

    cout << m2.brojElemenata() << " ";
    cout << m2[s1] << " ";
    cout << m3.brojElemenata() << " ";
    cout << m3[s1] << " ";
}

cout << m.brojElemenata();
cout << " '" << m[s1] << "' ";
m.obrisi();
cout << m.brojElemenata();
cout << " '" << m[s2] << "'";

И это ошибка: error: invalid initialization of non-const reference of type 'BinStabloMapa< >&' from a temporary of type 'BinStabloMapa< >* const'|

Он показывает ошибку в моем операторе =:

template <typename TipKljuca,typename TipVrijednosti>
BinStabloMapa<TipKljuca,TipVrijednosti>& BinStabloMapa<TipKljuca,TipVrijednosti>::operator =(const BinStabloMapa<TipKljuca,TipVrijednosti> &m)
{
    if(this==&m) return this;    // ERROR APPEARS HERE 

    obrisiPomocna(korijen);
    korijen=0;

    kopiraj(korijen, m.korijen, 0);
    return *this;
}

Я не совсем уверен, что я делаю неправильно здесь, так как меня научили делать оператор = следующим образом: защита саморазрушения + деструктор + конструктор копирования. Код, который я пытаюсь запустить, должен быть способен скомпилировать, поскольку это автотест для всей моей программы. Извините, если я не объяснил это слишком хорошо, все еще изучая C++ и все английские термины :)

  • 0
    Должны ли это быть помечены windows ? Часто бывает полезно предоставить такую информацию, но я не понимаю, как она применима.
  • 0
    У вас есть два оператора возврата в этой функции, и один не выдает эту ошибку. Какой у тебя вывод?
Показать ещё 1 комментарий
Теги:
operator-overloading

1 ответ

2
Лучший ответ

Измените return this чтобы return *this.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню