Перегрузка операторов шаблонами - PullRequest
0 голосов
/ 18 ноября 2011

Я пытаюсь запустить программу с шаблонами, используя методы operator <,>, я получаю сообщение об ошибке компилятора, сообщающее мне "экземпляр создан" и не может преобразовать Temps<double>' to double 'в ответ,, Проблема начинается, когда я вызываю функцию оператора. Вот код ..

    template <class T>
class Temps
{   
 private:   
 T a;

 public:
 Temps()
 {
 }
 Temps(T b)
 {
   a=b;
         }     
 T operator<(Temps c)
 {
   if (a < c.a)
   {
      return *this;
   }
   return c;        
 } 
 T operator>(Temps c)              
   {
      if (a > c.a)
      {
         return *this;
      }

      return c;                 
   }   

};

int main()
{

    double d1 = -9.002515,d2=98.321,d3=1.024;

    Temps<double>mag(d1);
    Temps<double>lag(d3);
    Temps<double>tag;
    tag=mag < lag;

    system("pause");
    return 0;
}

1 Ответ

6 голосов
/ 18 ноября 2011

Ваши функции < и > возвращают T, но вы пытаетесь вернуть Temps<T>.То, что вы, вероятно, хотите вернуть, это либо a, либо c.a.Но нормальная семантика < и > должна возвращать bool, поэтому вы можете захотеть вернуть a < c.a для <:

bool operator <(Temps c) { return a < c.a; }

Аналогично для >.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...