C++关于模板类定义的问题师长请进

img

为什么编译不了??

还有就是

img

这个定义的解释函数内就不用了解释了

img

img


这是教材

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>::是在类外定义成员函数的限定符