2013-07-19 2 views
1

Итак, вот код, который работает. Добавлено без каких-либо изменений. Есть значения X и Y, которые должны быть между 0 и 1024. tyleSize равно 1024;min и 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

Убедитесь, что вы фактически используете функции min и max от <algorithm>, а не некоторые макросы, определенные в другом месте. Например, заголовок для Windows windef.h определяет max, как это:

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

Это не будет работать в вашем коде, поскольку она потенциально оценивает каждый аргумент дважды, и rand дизайн возвращает другой результат каждый раз.

Попробуйте просмотреть источник после предварительной обработки, чтобы узнать, используете ли вы макросы. Вы можете отключить макросы Windows, указав NOMINMAX перед включением любых заголовков.

+0

Виртуальный (+1) (ранее я дошел до дневного лимита голосов) –

+1

@ Magtheridon96 Я поддержал вас. Я буду звать тебя, когда мне потребуется дополнительный голос. (Не совсем, психические отладочные способности, достойные upvote.) –

+2

Они также могут явно указывать 'std :: min' и' std :: max', чтобы быть уверенными в получении стандартных функций библиотеки. – Blastfurnace

Смежные вопросы