2012-08-09 140 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