运算符operator++重定义?
代码如下:
#include <iostream>
using namespace std;
template < typename T, T UBound, T LBound = T() >
class BoundedNum
{
static T UpBound;
static T LowBound;
static void Clip( T& value ){
T dist = UpBound - LowBound;
while (value > UpBound)
value = UpBound;
while (value < LowBound)
value = LowBound;
}
T Current;
public:
explicit BoundedNum(): Current(LowBound){}
BoundedNum( T value ){
Clip( value );
Current = value;
}
BoundedNum& operator += ( T v ) { Current += v; Clip( Current ); return *this; }
BoundedNum& operator -= ( T v ) { Current -= v; Clip( Current ); return *this; }
BoundedNum& operator *= ( T v ) { Current *= v; Clip( Current ); return *this; }
BoundedNum& operator /= ( T v ) { Current /= v; Clip( Current ); return *this; }
operator T(){ return Current; }
//friend T operator + ( T v, CycNum cn ) { return v + cn.Current; }
friend BoundedNum operator +( BoundedNum cn, T v ) { return BoundedNum( cn.Current + v ); }
friend BoundedNum operator -( BoundedNum cn, T v ) { return BoundedNum( cn.Current - v ); }
friend BoundedNum operator *( BoundedNum cn, T v ) { return BoundedNum( cn.Current * v ); }
friend BoundedNum operator /( BoundedNum cn, T v ) { return BoundedNum( cn.Current / v ); }
template< int u, int l >
friend int operator++( BoundedNum< int, u, l >& cn )
{
++cn.Current;
if( cn.Current > cn.UpBound ) cn.Current = cn.UpBound;
return cn.Current;
}
template< int u, int l >
friend int operator++( BoundedNum< int, u, l >& cn, int)
{
int ret = cn.Current;
++cn;
return ret;
}
template< int u, int l >
friend int operator--( BoundedNum< int, u, l >& cn )
{
--cn.Current;
if( cn.Current < cn.LowBound ) cn.Current = cn.LowBound;
return cn.Current;
}
template< int u, int l >
friend int operator--( BoundedNum< int, u, l >& cn, int)
{
int ret = cn.Current;
--cn;
return ret;
}
};
template < typename T, T UBound, T LBound >
T BoundedNum<T, UBound, LBound>::LowBound = LBound;
template < typename T, T UBound, T LBound >
T BoundedNum<T, UBound, LBound>::UpBound = UBound;
int _tmain(int argc, _TCHAR* argv[])
{
BoundedNum<int, 255> a;
BoundedNum<int, 200> b;//这里出现operator++重定义错误
cout << a + b << endl;
return 0;
}
为什么会出现重定义错误?