使用模板重载操作符

Operator overloading with templates

本文关键字:重载 操作符      更新时间:2023-10-16

我试图使用操作符<方法,我得到一个编译器错误告诉我>"从这里实例化"不能转换Temps<double>' to双'在返回,问题开始时,我调用操作符函数这里的代码..

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

您的<>函数返回T,但您试图返回Temps<T>。您可能想要返回的是ac.a。但是<>的正常语义是返回bool,因此您可能希望为<返回a < c.a:

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

>类似