重载运算符时如何在构造函数中使用模板作为参数?
How to use template as argument in constructor while overloading operators?
我正在制作一个程序,其中我为矢量创建 class 并重载不同的运算符。现在我想将向量(坐标)的参数作为模板。
当我将所有代码都放在一个文件中时,一切正常,程序 运行 正确:
#ifndef VECTOR4D_H_INCLUDED
#define VECTOR4D_H_INCLUDED
template <typename TYPE>
class VECTOR4D{
public:
VECTOR4D (void): X(0), Y(0), Z(0), T(0){};
VECTOR4D (TYPE X, TYPE Y, TYPE Z, TYPE T): X(X), Y(Y), Z(Z), T(T){};
TYPE X, Y, Z, T;
VECTOR4D &operator+=(VECTOR4D &K){
this->X += K.X;
this->Y += K.Y;
this->Z += K.Z;
this->T += K.T;
return *this;
}
};
#endif // VECTOR4D_H_INCLUDED
但是当我将重载运算符的实现和声明分开时,我遇到了问题。
//vector4d.h
#ifndef VECTOR4D_H_INCLUDED
#define VECTOR4D_H_INCLUDED
template <typename TYPE>
class VECTOR4D{
public:
VECTOR4D (void): X(0), Y(0), Z(0), T(0){};
VECTOR4D (TYPE X, TYPE Y, TYPE Z, TYPE T): X(X), Y(Y), Z(Z), T(T){};
TYPE X, Y, Z, T;
VECTOR4D &operator+=(VECTOR4D &);
};
#endif // VEKTOR4D_H_INCLUDED
//project.cpp
#include <iostream>
#include "vector4d.h"
VECTOR4D &VECTOR4D::operator+=(VECTOR4D &K)
{
this->X += K.X;
this->Y += K.Y;
this->Z += K.Z;
this->T += K.T;
return *this;
}
在编译过程中出现错误:
invalid use of template-name 'VECTOR4D' without an argument list
我该怎么做才能使其正确?
VECTOR4D 是一个模板 class。模板 class 的所有方法都必须在头文件中实现(您可以在这里阅读:Why can templates only be implemented in the header file? )
如果在 class 声明
之外定义模板 class 方法,您还应该指定模板参数
template<typename TYPE>
VECTOR4D<TYPE> &VECTOR4D<TYPE>::operator+=(VECTOR4D<TYPE> &K)
{
this->X += K.X;
this->Y += K.Y;
this->Z += K.Z;
this->T += K.T;
return *this;
}
我正在制作一个程序,其中我为矢量创建 class 并重载不同的运算符。现在我想将向量(坐标)的参数作为模板。 当我将所有代码都放在一个文件中时,一切正常,程序 运行 正确:
#ifndef VECTOR4D_H_INCLUDED
#define VECTOR4D_H_INCLUDED
template <typename TYPE>
class VECTOR4D{
public:
VECTOR4D (void): X(0), Y(0), Z(0), T(0){};
VECTOR4D (TYPE X, TYPE Y, TYPE Z, TYPE T): X(X), Y(Y), Z(Z), T(T){};
TYPE X, Y, Z, T;
VECTOR4D &operator+=(VECTOR4D &K){
this->X += K.X;
this->Y += K.Y;
this->Z += K.Z;
this->T += K.T;
return *this;
}
};
#endif // VECTOR4D_H_INCLUDED
但是当我将重载运算符的实现和声明分开时,我遇到了问题。
//vector4d.h
#ifndef VECTOR4D_H_INCLUDED
#define VECTOR4D_H_INCLUDED
template <typename TYPE>
class VECTOR4D{
public:
VECTOR4D (void): X(0), Y(0), Z(0), T(0){};
VECTOR4D (TYPE X, TYPE Y, TYPE Z, TYPE T): X(X), Y(Y), Z(Z), T(T){};
TYPE X, Y, Z, T;
VECTOR4D &operator+=(VECTOR4D &);
};
#endif // VEKTOR4D_H_INCLUDED
//project.cpp
#include <iostream>
#include "vector4d.h"
VECTOR4D &VECTOR4D::operator+=(VECTOR4D &K)
{
this->X += K.X;
this->Y += K.Y;
this->Z += K.Z;
this->T += K.T;
return *this;
}
在编译过程中出现错误:
invalid use of template-name 'VECTOR4D' without an argument list
我该怎么做才能使其正确?
VECTOR4D 是一个模板 class。模板 class 的所有方法都必须在头文件中实现(您可以在这里阅读:Why can templates only be implemented in the header file? )
如果在 class 声明
之外定义模板 class 方法,您还应该指定模板参数template<typename TYPE>
VECTOR4D<TYPE> &VECTOR4D<TYPE>::operator+=(VECTOR4D<TYPE> &K)
{
this->X += K.X;
this->Y += K.Y;
this->Z += K.Z;
this->T += K.T;
return *this;
}