这是我正在处理的游戏引擎代码的一部分。当我构建/调试代码时,它会因编译错误而停止:“Camera.cpp(70):错误C2059:语法错误:'=='”而第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;
}
}
}
我有其他函数以相同的方式使用==运算符,但它们不会收到错误。如果您有任何建议,谢谢...
答案 0 :(得分:17)
许多年前(在遥远的星系中)near
和far
是关键词。看起来你的编译器仍然认为它们是 - 它可能试图提供帮助。
您需要选择不同的名称,或者弄清楚如何关闭此特定向后兼容的“功能”。
答案 1 :(得分:10)
如果您包含windows.h或包含它的文件(当然您包括它,因为您调用了MessageBox),那么您正在编写Windows和Windows编码,然后far
和near
都在windef.h
中定义,您不能将它们用作变量名称
答案 2 :(得分:3)
将浮点数与==进行比较也很危险。它不可能以绝对精度表示每个数字。我相信主要的ieee浮动实现仅适用于6个重要位置。您将找到两种方法或计算出相同数字的数量将超出0.000001或更少,因此不会相等。