You are missing this:
//VectorMath.cpp
The norm function is part of VectorMath:: . Without it, you just have a free function.
This is more about your design, but why are you using pointers to everything? This is much cleaner:
class VectorMath { public: static Vector3D norm(const Vector3D&); };
Take the links, you are in C ++, so do not write C code. What happens when I call it?
VectorMath::norm(0);
Is it either a failure, you have to put a check, and in this case, what should it return? All this is cleared using links.
Also, why not just make these members of the Vector3D class?
Vector3D* v = new Vector3D(x, y, z); v->norm();
Finally, lay out the stack. Your code has a memory leak right now:
int main(void) { Vector3D* v = new Vector3D(x, y, z); Vector3D* normVector = VectorMath::norm(v);
Change it and use RAII :
int main(void) { Vector3D v(x, y, z); Vector3D* normVector = VectorMath::norm(v);
And by creating norm a member function, you get very clean code:
int main(void) { Vector3D v(x, y, z); Vector3D normVector(v.norm()); }
No pointers, no leaks, everything is sexy.