Вам не хватает этого:
//VectorMath.cpp
#include "VectorMath.h"
|
V - here
Vector3D* VectorMath::norm(Vector3D* vector)
{
...
}
Функция norm
является частью VectorMath::
. Без этого у вас просто есть бесплатная функция.
Это больше касается вашего дизайна, но почему вы используете указатели на все? Это намного чище:
class VectorMath {
public:
static Vector3D norm(const Vector3D&);
};
Возьмите ссылки, вы на C ++, поэтому не пишите код на C. Что происходит, когда я это называю?
VectorMath::norm(0); // null
Это может произойти сбой, вы должны поставить чек, в случае чего, что он должен вернуть? Это все очищено с помощью ссылок.
Кроме того, почему бы просто не сделать этих членов Vector3D
класса?
Vector3D* v = new Vector3D(x, y, z);
v->norm(); // normalize would be better, in my opinion
И наконец, вещи, выделяемые стеком. У вашего кода сейчас утечка памяти:
int main(void) {
Vector3D* v = new Vector3D(x, y, z);
Vector3D* normVector = VectorMath::norm(v);
// delete v;
// ^ you're not deleting it!
}
Измените его на это и используйте RAII понятия:
int main(void) {
Vector3D v(x, y, z);
Vector3D* normVector = VectorMath::norm(v);
// delete v;
// ^ you're not deleting it!
}
И, сделав norm
функцией-членом, вы получите очень чистый код:
int main(void) {
Vector3D v(x, y, z);
Vector3D normVector(v.norm());
}
Нет указателей, нет утечек, все сексуально.