2013-07-19 83 views
1

所以這裏是可用的代碼。張貼它沒有任何改變。 有X和Y值必須介於0和1024之間。tyleSize是1024;分鐘和max在這種情況下根本不起作用?

//爲X

int loffx=accurate(curphisobj->x) + (rand() % 100) - 50; //some math, doent matter 
loffx=max(loffx,1); 
loffx=min(loffx,tyleSize); 

//用於Y

int loffy=accurate(curphisobj->y) + (rand() % 100) - 50; 
loffy=max(loffy,1); 
loffy=min(loffy,tyleSize-3); 

但如果我把它寫這樣的:

int loffy=min(max(accurate(curphisobj->y) + (rand() % 100) - 50,1),tyleSize - 2); 
int loffx=min(max(accurate(curphisobj->x) + (rand() % 100) - 50,0),tyleSize); 

我得到loffx和loffy 1034,1029, -5, - 2,各種規格的最大和最小未切割。

有什麼我不知道C++編譯器,或有一些愚蠢的錯誤?

+0

定義'max'和'min',同樣'精確',你在做什麼?你使用的任何命名空間,任何文件都是'include'd?.. –

+1

你需要一個鉗位功能? –

+1

其聲明未顯示的類型的簽名?這些'std :: min'和'std :: max'? –

回答

9

確保您實際上使用<algorithm>minmax函數,而不是其他地方定義的某些宏。例如,Windows頭windef.h定義max這樣的:

#define max(a,b) (((a) > (b)) ? (a) : (b)) 

這不會在你的代碼工作,因爲它潛在地評估每個參數兩次,rand設計返回每次不同的結果。

嘗試在預處理後查看源代碼,看看您是否使用宏。在包含任何頭文件之前,您可以通過定義NOMINMAX來關閉Windows宏。

+0

虛擬(+1)(我早些時候達到每日投票限額) –

+1

@ Magtheridon96我爲你投票贊成。當我需要額外的投票時我會通知你。 (不是真的,精神上的調試能力值得讚賞。) –

+2

他們也可以明確地說'std :: min'和'std :: max'確保獲得標準庫函數。 – Blastfurnace

相關問題