2010-03-09 85 views
1

第二個函數給出錯誤C2803 http://msdn.microsoft.com/en-us/library/zy7kx46x%28VS.80%29.aspx:'運算符'必須至少有一個類類型的形式參數。任何線索?C++覆蓋全局運算符逗號給出錯誤

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

您不能重載內置類型的運算符。而你一再試圖超負荷運動的方法被誤導了 - 這不是一個神奇的子彈。 – 2010-03-09 01:57:12

+1

@尼爾,你的評論太棒了。我喜歡它們xD – 2010-03-09 02:56:48

+0

這是一個魔法子彈,它總是將你射向腳下! – Potatoswatter 2010-03-09 03:23:41

回答

2

改變,要:

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

在C++中,你不能重載操作者如果它的參數中的至少一個是不是一個自定義的類或類似枚舉原始的東西。您不能爲int類型重載+,並且類似地,您不能爲double類型重載,

+0

編譯錯誤是錯誤的。兩個參數都是枚舉,運算符函數可以很好地運行。 – 2010-03-09 02:58:50