Перегрузка оператора string()

#c

#c

Вопрос:

У меня есть задание, которое мой учитель сказал нам использовать в файле .h:

     operator string();
  

и мы никак не можем от этого отклониться.

Итак, в моем .cpp-файле у меня есть:

    Currency::operator string(){
 stringstream output;
 output<<"$";
 output<<dollars;//Why does this return garbage for money1 money2??
 output<<".";
 output<<cents;
 string outputstring = output.str();
 return outputstring;
   }
  

Но когда я делаю string(money1 money2) , это возвращает мусор, он работает нормально, когда я просто делаю ‘string(money1)`. Мне интересно, что я делаю не так.

Любая помощь будет отличной.

Вот мой перегруженный код оператора:

 Currencyamp; Currency::operator (const Currency amp;rhs){
Currency temp;
temp.dollars = dollars   rhs.dollars;
temp.cents = cents   rhs.cents;
temp.simplify();
return temp;
}
  

Примечания: Я запустил отладчик, и с перегруженным оператором проблем нет; он возвращает то, что должен.

Комментарии:

1. Ваша ошибка, вероятно, заключается в вашем operator , а не в operator string .

2. Возможно, ваша проблема в коде, который вы нам не показали. Пожалуйста, создайте минимальный, полный пример программы и скопируйте-вставьте его сюда. В процессе вы можете сами обнаружить ошибку. См . sscce.org для получения дополнительной информации.

3.То, что, по- operator видимому, возвращает ожидаемое значение, не означает, что оно правильное. Особенно с C .

4. Я добавил сюда перегруженный код.

5. Ваш учитель неправ, запрещая вам изменять эту строку. Это должно быть operator string() const;

Ответ №1:

Вот мой перегруженный код оператора:

Вы возвращаете локальную переменную по ссылке. Никогда не делайте этого.

Вы должны возвращать его по значению:

 Currency Currency::operator (const Currency amp;rhs)
  

Комментарии:

1. Спасибо, я перепутал инструкции моего профессора. Я думал, что у него все было так, как было у меня изначально, но я ошибся. Теперь я исправил это, и ошибка исправлена.