为什么编译不了??
还有就是
这个定义的解释函数内就不用了解释了
你24行漏了个<T>
应该是Vector2D<T> Vector2D<T>::add(...)
template <typename T>
class Vector2D
{
public:
Vector2D(T X,T Y) : x(X),y(Y) {}
template<typename RType>
Vector2D add(const RType &rhs);
void print() {cout<<"("<<x<<","<<y<<")"<<endl;}
private:
T x,y;
};
template <typename T>
template <typename RType>
Vector2D<T> Vector2D<T>::add(const RType &rhs)
{
x += rhs;
y += rhs;
return *this;
}
int main()
{
Vector2D<int> v1(1,2);
int intNum = 3;
float floatNum = 1.9;
cout<<"v1加上intNum的结果为:"<<endl;
(v1.add<int>(intNum)).print();
cout<<"v1加上floatNum的结果为:"<<endl;
(v1.add<float>(floatNum)).print();
return 0;
}
30行1后面的逗号是中文的吧?
第24行改为
Vector2D<T> Vector2D<T>::add(const RType &rhs)
template <typename T>
template <typename RType>
Vector2D<T> Vector2D<T>::add(const RType &rhs)
第一个template <typename T>
是类模板的模板参数声明,即声明Vector2D类模板只有一个模板参数T
第二个template <typename RType>
是模板成员函数add的模板参数声明,add本身也是一个模板函数,其参数类型是RType
这两个template不能合并成一个,因为这是两个不同的模板,一个是类模板,一个函数模板
第一个Vector2D<T>
是成员函数add的返回值类型
第二个 Vector2D<T>::
是在类外定义成员函数的限定符