2012-08-09 136 views
6

这是我工作的游戏引擎的代码的一部分。当我编译/调试代码时,它停止编译器错误:“Camera.cpp(70):error C2059:syntax error:'=='”and line 70 is the语法错误“==”

if (near == far) line。这也恰好在线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; 
     } 
    } 
} 

我有使用==操作符以同样的方式等功能,但他们没有得到一个错误。谢谢,如果您有任何建议...

+3

“远”是一个保留字吗? – asawyer 2012-08-09 20:28:39

+0

@asawyer:不,你正在考虑'for' :) – 2012-08-09 20:29:37

+1

@PeterAlexander不,我在想远点。 – asawyer 2012-08-09 20:30:14

回答

17

很多年前(在一个星系远,很远)nearfar是关键字。看起来你的编译器仍然认为它们是 - 它可能试图有帮助。

您或者需要选择不同的名称,或者想出如何关闭这个特定的向后兼容'功能'。

+0

感谢您的信息,也爱星球大战参考! +1 – Annabelle 2012-08-09 20:39:59

+0

哇......我很高兴我没有遇到那个。我不会想到在几年内检查:p – 2012-08-09 20:47:39

+0

是的,伟大的星球大战参考。非常感谢您提供有用的答案。它工作异常! – Niro56 2013-04-09 03:05:19

10

您编码为Windows和Windows如果包括WINDOWS.H或包括它(当然包括你,因为你必须MessageBox的调用)的文件,然后farnearwindef.h和你俩定义不能将它们用作变量名称

+0

简单的'#undef'能够解决这个问题吗? – Dai 2012-09-08 02:02:22

+0

实际上windows并没有使用'far'和'near',而是为了兼容性,所以你可以使用'#undef'来取消定义它们,并且每一件事情都可以,但是重命名变量会更清晰,因为它是真的,'很多年前(在一个遥远的银河系)远近都是关键字......' – BigBoss 2012-09-08 19:34:49

+0

我想起了一个早先重写Windows头文件的活动(http://stackoverflow.com/questions/6146978/is-it-a-good-idea-to-recreate-win32s-headers)。也许我应该继续... – Dai 2012-09-08 20:49:04

3

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

+1

但是这并没有回答有关语法错误的问题。 – Marlon 2012-08-09 20:46:28

+5

@StackUnderflow也许,但它可能抢先回答下一个:P – asawyer 2012-08-09 20:47:02