Подтвердить что ты не робот

Предупреждение C4003: недостаточно фактических параметров для макроса "max" - Visual Studio 2010 С++

У меня есть следующие предупреждения при компиляции проекта openFrameworks 007 в Visual Studio 2010 SP1:

d:\pedro\development\videoflow\openframeworks\libs\openframeworks\types\ofcolor.h(127): warning C4003: not enough actual parameters for macro 'max'
d:\pedro\development\videoflow\openframeworks\libs\openframeworks\types\ofcolor.h(128): warning C4003: not enough actual parameters for macro 'max'
d:\pedro\development\videoflow\openframeworks\libs\openframeworks\graphics\ofpixels.h(150): warning C4003: not enough actual parameters for macro 'max'
d:\pedro\development\videoflow\openframeworks\libs\openframeworks\graphics\ofpixels.h(151): warning C4003: not enough actual parameters for macro 'max'

Из того, что я мог сказать, за этими предупреждениями обычно следуют ошибки, но в моем случае все работает нормально. Поврежденный код ниже:

const float srcMax = ( (sizeof(SrcType) == sizeof(float) ) ? 1.f : numeric_limits<SrcType>::max() );
const float dstMax = ( (sizeof(PixelType) == sizeof(float) ) ? 1.f : numeric_limits<PixelType>::max() );

Я попытался установить NOMINMAX на препроцессор, но поскольку openFrameworks также определяет NOMINMAX on ofConstants.h, я получаю кучу предупреждений, которые уже определены NOMINMAX.

Я попытался определить NOMINMAX на поврежденных файлах openFrameworks, но это приводит к тому же предупреждению (фактически, если я анализирую файлы, включенные в ofColor.h и ofPixel.h, они в конечном итоге включают в себя theConstants.h, поэтому NOMINMAX следует определить).

Любая идея о том, как это решить? Если вы не... что было бы лучше? Это предупреждения или куча предупреждений о том, что NOMINMAX уже определен?

EDIT:

Кстати, когда я говорил об ошибках, о которых я говорил: предупреждение C4003 и ошибки C2589 и C2059: x = std:: numeric_limits <int> :: max();

Я получаю это (предупреждение плюс 2 ошибки), если я попытаюсь воспроизвести проблему на чистом проекте С++. Но в моем проекте openFrameworks я просто получаю предупреждения. Вот почему я запутался!!

4b9b3361

Ответ 1

Добавьте #undef max в начало соответствующих файлов.

Ответ 2

Вы не первый, кого укусили эти древние макросы. Они не могут удалить их, что нарушит старый код. Поэтому они придумали еще один макрос, чтобы удалить жало. Сделайте это так:

#ifndef NOMINMAX
# define NOMINMAX
#endif
#include <windows.h>
// Rest of your #includes here
//...

Ответ 3

#pragma warning (disable: 4003)