gpt4 book ai didi

c++ - 对库中函数的 undefined reference

转载 作者:行者123 更新时间:2023-11-28 02:45:00 24 4
gpt4 key购买 nike

<分区>

我正在开发我自己的数学库,我在为库使用的命名空间中有几个非成员函数(“cml”,好像它很重要)。无论如何,库(我将其静态构建为 .a/.lib 文件)编译得很好,但是当我在测试程序中使用该库时,我收到一个错误,指出函数是 undefined reference 。

这是头文件(func.h):

namespace cml
{

template <typename T>
T toRadians(T val);
template <typename T>
T toDegrees(T val);

template <typename T>
T fastSqrt(T val);
template <typename T>
T fastInverseSqrt(T val);

}

这是 func.cpp 文件:

#include <CML/func.h>

#include <cmath>
#include <math.h>
#include <limits>
#include <cassert>

namespace cml
{

template <typename T>
T toRadians(T val)
{
static_assert(std::numeric_limits<T>::is_iec559, "toRadians() requires the template parameters to be floating points.");

return val * MATH_PI / 180;
}

template <typename T>
T toDegrees(T val)
{
static_assert(std::numeric_limits<T>::is_iec559, "toDegrees() requires the template parameters to be floating points.");

return val * 180 / MATH_PI;
}

template <typename T>
T fastSqrt(T val)
{
static_assert(std::numeric_limits<T>::is_iec559, "fastSqrt() requires the template parameters to be floating points.");

return T(1) / fastInverseSqrt(val);
}

template <typename T>
T fastInverseSqrt(T val)
{
static_assert(std::numeric_limits<T>::is_iec559, "fastInverseSqrt() requires the template parameters to be floating points.");

T tmp = val;
T half = val * T(0.5);
uint32* p = reinterpret_cast<uint32*>(const_cast<T*>(&val));
uint32 i = 0x5f3759df - (*p >> 1);
T* ptmp = reinterpret_cast<T*>(&i);
tmp = *ptmp;
tmp = tmp * (T(1.5) - half * tmp * tmp);
#if defined(CML_ACCURATE_FUNC) // If more accuracy is requested, run Newton's Method one more time
tmp = tmp * (T(1.5) - half * tmp * tmp);
#endif // defined
return tmp;
}

}

我收到所有四个函数的错误。我在 Windows8 上使用最新版本的 Code::Blocks 和 GCC。我正在为 Win32 编译。我已经尝试了不同的建议,比如标记函数 extern,但它似乎并没有解决它。我确定这是我遗漏的简单问题,如果是这种情况,第二双眼睛可能会有所帮助。

错误正是:undefined reference tofloat cml::toRadians(float)'`

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