gpt4 book ai didi

c++ - header 包含和编译器错误

转载 作者:行者123 更新时间:2023-11-28 08:27:48 25 4
gpt4 key购买 nike

在我的 CPP 文件中,我有一个调用:

pt.x = mDownPoint.x + FSign(pt.x-mDownPoint.x) *
FMax( FAbs(pt.x-mDownPoint.x), FAbs(pt.y-mDownPoint.y) );

我得到了 FSignFMaxFAbs 的编译器错误,但我在它们所在的位置包含了头文件。

所以我不明白为什么它找不到它,除非我在创建这个头文件时做错了什么。

我能得到一些关于我做错了什么的指示吗?

标题:

class FxMathFunctions
{
struct FxPoint2d;

public:
FxMathFunctions();
~FxMathFunctions();

static FxInt32 IMin(FxInt32 i1,FxInt32 i2);
static FxInt32 IMax(FxInt32 i1,FxInt32 i2);
static FxInt32 ILimit(FxInt32 val, FxInt32 i1, FxInt32 i2);
static FxDouble FMin(FxDouble i1,FxDouble i2);
static FxDouble FMax(FxDouble i1,FxDouble i2);
static FxFloat FMax(FxFloat i1,FxFloat i2);
static FxFloat FLimit(FxFloat val, FxFloat i1, FxFloat i2);
static FxDouble FrInverseContrast(FxDouble opacity,FxDouble antialias);
static FxInt32 ISign(FxInt32 l);
static FxFloat FSign(FxFloat v);
static FxInt32 IAbs(FxInt32 l);
static FxFloat FAbs(FxFloat v);
static FxInt32 INonzero(FxInt32 l);
static double DAbs(double v);
static FxInt32 Sqr(FxByte v);
static FxInt32 Sqr(FxInt32 v);
static FxFloat Sqr(FxFloat v);
static FxDouble Sqr(FxDouble v);
static FxInt32 FrCubed(FxByte v);
static FxInt32 FrCubed(FxInt32 v);
static FxFloat FrCubed(FxFloat v);
static FxDouble FrCubed(FxDouble v);
static FxDouble FrFourthPower(FxDouble v);
static FxFloat FrFourthPower(FxFloat v);
static FxBool FNearEqual(FxFloat val, FxFloat nearTo, FxFloat closeness = 0.00001f);
static FxBool FNearGreaterEqual(FxFloat val, FxFloat nearTo, FxFloat closeness = 0.00001f);
static FxBool FNearLessEqual(FxFloat val, FxFloat nearTo, FxFloat closeness = 0.00001f);
};

.CPP to Header 适用于一个失败的函数:

FxFloat FAbs(FxFloat v)
{
if (v < 0.0f) v = -v;
return v;
}

编辑:

固定调用:

pt.x = mDownPoint.x + FxMathFunctions::FSign(pt.x-mDownPoint.x) * 
FxMathFunctions::FMax( FxMathFunctions::FAbs(pt.x-mDownPoint.x),
FxMathFunctions::FAbs(pt.y-mDownPoint.y) );

失败:

error: cannot call member function 'FxFloat FxMathFunctions::FAbs(FxFloat)'

最佳答案

所有函数都在 FxMathFunctions 中,所以它应该是:

pt.x = mDownPoint.x + FxMathFunctions::FSign(pt.x-mDownPoint.x) *
FxMathFunctions::FMax( FxMathFunctions::FAbs(pt.x-mDownPoint.x),
FxMathFunctions::FAbs(pt.y-mDownPoint.y) );

但这就是命名空间的用途,我不认为你真的想要一个类。如果它是一个命名空间,您甚至可以在您的代码所在函数的顶部执行 using namespace FxMathFunctions; 并将您的代码留在问题中。


其次,其中很多函数不需要编写,除非您已经获得了它们的一些手写实现。 (只需使用 cmathutility,例如 std::fabsstd::min。)最后,为什么不像 Sqr 那样将 FAbsDAbs 重载为 Abs?这将使界面更简单。

关于c++ - header 包含和编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3330239/

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