You can't create objects from forward declarations. Make them pointers instead.
Code:
#include "sdl.h"
class Vector3;
class Point3;
class Ray {
public:
//Ray();
Point3* start;
Vector3* dir;
//void setStart(Point3& p) {start = new Point3(); start.x=p.x; start.y=p.y; start.z=p.z;};
//void setDir(Vector3& v) {dir = new Vector3(); dir.x=v.x ; dir.y=v.y ; dir.z=v.z;};
//other fields and methods....
};
of course you probably want to do the new in the constructor, i just did it there to make your example work