6

这是我正在开发的游戏引擎代码的一部分。当我构建/调试代码时,它会因编译器错误而停止:“Camera.cpp(70): error C2059: syntax error: '=='” 并且第 70 行是

if ( near == far )线。它也发生在第 75 行:

(if near == NULL || far == NULL)

bool Camera::SetClippingPlanes( float near, float far )
{
    if (near == far)  //Line 70(First Error)
    { 
        MessageBox(NULL, L"ERROR: The far and near clipping planes cannot be equal!", L"Error", MB_OK | MB_ICONERROR);
        return false;
    }
    else
    {
        if (near == NULL || far == NULL)  //Line 75(Second Error)
        {
            MessageBox(NULL, L"ERROR: Near and/or Far clipping planes are null!", L"Error", MB_OK | MB_ICONERROR);
            return false;
        }
        else
        {
            nearPane = near;
            farPane = far;
            return true;
        }
    }
}

我还有其他以相同方式使用 == 运算符的函数,但它们没有收到错误。谢谢,如果你有任何建议...

4

3 回答 3

17

许多年前(在遥远的星系中)near并且far是关键字。看起来您的编译器仍然认为它们是 - 它可能试图提供帮助。

您要么需要选择不同的名称,要么弄清楚如何关闭这个特定的向后兼容的“功能”。

于 2012-08-09T20:32:22.250 回答
10

如果您包含 windows.h 或包含它的文件(当然您包含它,因为您有对 MessageBox 的调用),那么您正在为 windows 和 windows 进行编码,那么far它们near都被定义windef.h并且您不能将它们用作变量名字

于 2012-08-09T20:38:22.800 回答
3

将浮点数与 == 进行比较也很危险。不可能以绝对精度表示每个数字。我相信主要的 ieee 浮动实现只适用于 6 个重要的地方。你会找到两种方法,或者计算应该是相同的数字会减少 0.000001 或更少,因此不会相等。

于 2012-08-09T20:43:46.077 回答