Ответ 1
Добавьте #undef max
в начало соответствующих файлов.
У меня есть следующие предупреждения при компиляции проекта 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 я просто получаю предупреждения. Вот почему я запутался!!
Добавьте #undef max
в начало соответствующих файлов.
Вы не первый, кого укусили эти древние макросы. Они не могут удалить их, что нарушит старый код. Поэтому они придумали еще один макрос, чтобы удалить жало. Сделайте это так:
#ifndef NOMINMAX
# define NOMINMAX
#endif
#include <windows.h>
// Rest of your #includes here
//...
#pragma warning (disable: 4003)