代码之家  ›  专栏  ›  技术社区  ›  uray

C++覆盖全局运算符逗号给出错误

  •  1
  • uray  · 技术社区  · 16 年前

    第二个函数给出错误C2803 http://msdn.microsoft.com/en-us/library/zy7kx46x%28VS.80%29.aspx :“operator,”必须至少有一个类类型的形参。有什么线索吗?

    template<class T,class A = std::allocator<T>> 
    class Sequence : public std::vector<T,A> {
     public:
        Sequence<T,A>& operator,(const T& a) {
            this->push_back(a);
            return *this;
        }
        Sequence<T,A>& operator,(const Sequence<T,A>& a) {
            for(Sequence<T,A>::size_type i=0 ; i<a.size() ; i++) {
                this->push_back(a.at(i));
            }
            return *this;
        }
    };
    
    //this works!
    template<typename T> 
    Sequence<T> operator,(const T& a, const T&b) {
        Sequence<T> seq;
        seq.push_back(a);
        seq.push_back(b);
        return seq;
    }
    
    //this gives error C2803!
    Sequence<double> operator,(const double& a, const double& b) {
        Sequence<double> seq;
        seq.push_back(a);
        seq.push_back(b);
        return seq;
    }
    
    2 回复  |  直到 16 年前
        1
  •  2
  •   R Samuel Klatchko    16 年前

    将其更改为:

    Sequence<double> operator,(const Sequence<double>& a, const double& b)
    {
        Sequence<double> seq(a);
        seq.push_back(b);
        return seq;
    }
    

    或(基于 this article ):

    Sequence<double> operator,(Sequence<double> seq, const double& b)
    {
        seq.push_back(b);
        return seq;
    }
    
        2
  •  3
  •   vava    16 年前

    在C++中,如果它的至少一个参数不是自定义类或非原始的枚举类,则不能重载运算符。你不能超载 + 对于 int 类型,类似地,您不能重载 , 对于 double 类型。

    推荐文章