我有麻烦编译我的C++项目,因为我得到一个未定义的参考错误。
我有2类:未定义的参考
Vector3.h
class Vector3
{
public:
float x, y, z;
float v[3];
Vector3();
Vector3(float x, float y, float z);
float mag();
void normalize();
void invert();
void assign(float x, float y, float z);
Vector3& operator += (const Vector3& in);
Vector3& operator -= (const Vector3& in);
Vector3& operator *= (const float& in);
Vector3& operator /= (const float& in);
Vector3 operator -();
static const Vector3 vZero;
};
Vector3.cpp
#include "Vector3.h"
inline void Vector3::assign(float inx, float iny, float inz)
{
x = inx;
y = iny;
z = inz;
}
inline float Vector3::mag()
{
return (float)sqrt((*this) * (*this));
}
inline void Vector3::normalize()
{
float invMag = 1.f/mag();
(*this) *= invMag;
}
Ray.h
#include "Vector3.h"
class Ray
{
public:
Vector3 origin;
Vector3 direction;
Vector3 destination;
float distance;
Ray();
Ray(Vector3 o, Vector3 d);
void setOrigin(float x, float y, float z);
void setOrigin(const Vector3& v);
void findDirection(void);
void setDestination(float x, float y, float z);
void setDestination(const Vector3& v);
void findDestination(void);
void setDirection(const Vector3& v);
void normalizeDirection(void);
};
Ray.cpp
#include "Ray.h"
void Ray::findDirection(void)
{
direction = destination - origin;
distance = direction.mag();
direction.normalize();
}
当我编译使用Eclipse IDE我得到它:
/Ray.cpp:39: undefined reference to `Vector3::mag()'
/Ray.cpp:40: undefined reference to `Vector3::assign(float, float, float)'
/Ray.cpp:41: undefined reference to `Vector3::normalize()'
文件包含的头和自动完成工具的工作原理确定,它显示(识别)的方法:MAG,分配和规范。
我使用“g ++ -c”编译文件来创建.o文件,因为eclipse没有找到它们。但错误仍然存在。
有没有人知道这个问题的解决方案?
请注意文件Vector3.cpp和Ray.cpp只显示与此问题相关的代码。
感谢您的帮助!
显示您的编译命令。 – robert 2010-12-16 20:53:02
如果eclipse没有编译它们,那么它可能不会链接它们。检查您的项目设置以确保路径正确。 – stonemetal 2010-12-16 20:57:46
尝试在ray.cpp中包含directry vector3.h,它工作吗? – Delashmate 2010-12-16 20:59:57