gpt4 book ai didi

c++ - 未定义引用

转载 作者:行者123 更新时间:2023-11-27 22:29:36 25 4
gpt4 key购买 nike


我在编译我的 C++ 项目时遇到问题,因为我收到 undefined reference 错误。
我有 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;
};

vector 3.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;
}

雷.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);
};

射线.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、assign 和 normalize。

我使用“g++ -c”编译文件来创建 .o 文件,因为 eclipse 没有找到它们。但错误仍然存​​在。

有人知道这个问题的解决方案吗?

请注意,Vector3.cpp 和 Ray.cpp 文件仅显示与此问题相关的代码。

感谢您的帮助!

最佳答案

在 Vector3.cpp 中,从函数中删除 inline 修饰符,或将函数定义移至 Vector3.h。

C++ 编译器不能跨模块内联函数。您不能在一个模块中定义内联函数并从另一个模块调用它。

编辑:来自 The C++ Programming Language,第 199 页:“必须在使用它的每个翻译单元中通过相同的定义来定义内联函数。” pg 200:“为确保一致性,通常应仅将全局常量和内联放在头文件中。”

关于c++ - 未定义引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4465256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com