Здравствуйте, не могли бы вы мне пожалуйста помочь с решением проблемы? Я создал шаблонный класс, но не могу скомпилировать cpp файл. Компилятор ругается на
nested name specifier 'Vector3<V>::' for declaration does not refer into a class, class template or class template partial specialization
void Vector3 <V>::Cross(const Vector3<V>&multiplicationVector)
~~~~~~~~~~~~~~~^ {
То же относится и к перегрузке операторов
Ниже приведу небольшие куски кода:
Заголовок класса
template <typename V, typename = typename std::enable_if<std::is_arithmetic<V>::value, V>::type>
class Vector3 {
protected:
V calculateMagnitude();
public:
Vector3(V _x, V _y, V _z) : x(_x), y(_y), z(_z){};
V x;
V y;
V z;
/*
* Analog for dot product
*/
Vector3<V>& operator +=(const Vector3<V>& addVector);
/*
* Analog for dot product, but with minus sign
*/
Vector3<V>& operator -=(const Vector3<V>& substractVector);
/*
* Scalar multiplication operation
*/
Vector3<V>&operator *=(const int multiplicateNum);
/*
* Cross multiplication operation
*/
void Cross(const Vector3<V>& multiplicationVector);
/*
* Return count of available variables
* Can be used inside function AddDataPointer
*/
int Size();
/*
* Normalize current Vector
*/
void Normalize();
/*
* return current normalized vector, but not change current vector
*/
Vector3<V> * Normalized();
};
И исполнительный файл. Здесь лишь указаны примеры из того, как я прописывал метод и перегрузку операторов
template <class V>
V &Vector3<V>::operator+=(const Vector3<V> &addVector) {
this->x += addVector.x;
this->y += addVector.y;
this->z += addVector.z;
return *this;
}
template <typename V, typename = typename std::enable_if<std::is_arithmetic<V>::value, V>::type>
void Vector3<V>::Cross(const Vector3<V> &multiplicationVector) {
V valueX = this->y * multiplicationVector.z - this->z * multiplicationVector.y;
V valueY = this->z * multiplicationVector.x - this->x * multiplicationVector.z;
V valueZ = this->x * multiplicationVector.y - this->y * multiplicationVector.x;
this->x = valueX;
this->y = valueY;
this->z = valueZ;
}