我有麻煩編譯我的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