предупреждение C4003: недостаточно фактических параметров для макроса 'max' - Visual Studio 2010 C ++ - PullRequest
35 голосов
/ 30 июля 2011

У меня есть следующие предупреждения при компиляции проекта 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 в ofConstants.h, я получаю кучу предупреждений о том, что NOMINMAX уже определен.

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

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

EDIT:

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

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

Ответы [ 2 ]

66 голосов
/ 30 июля 2011

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

#ifndef NOMINMAX
# define NOMINMAX
#endif
#include <windows.h>
// Rest of your #includes here
//...
40 голосов
/ 30 июля 2011

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

...