web-dev-qa-db-fra.com

avertissement C4003: pas assez de paramètres réels pour la macro «max» - Visual Studio 2010 C ++

J'ai les avertissements suivants lors de la compilation d'un projet openFrameworks 007 sur 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'

D'après ce que j'ai pu voir, ces avertissements sont généralement suivis d'erreurs, mais dans mon cas, tout fonctionne bien. Le code affecté est ci-dessous:

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() );

J'ai essayé de définir NOMINMAX sur le préprocesseur mais comme openFrameworks définit également NOMINMAX sur ofConstants.h, j'obtiens un tas d'avertissements que NOMINMAX est déjà défini.

J'ai essayé de définir NOMINMAX sur les fichiers openFrameworks concernés mais cela donne le même avertissement (en fait, si j'analyse les fichiers inclus sur ofColor.h et ofPixel.h, ils finissent par inclure ofConstants.h donc NOMINMAX doit être défini).

Une idée sur la façon de résoudre ce problème? Si vous ne le faites pas ... ce qui serait le mieux? Ces avertissements ou un tas d'avertissements que NOMINMAX est déjà défini?

ÉDITER:

BTW quand je parlais d'erreurs je parlais de celles-ci: avertissement C4003 et erreurs C2589 et C2059 sur: x = std :: numeric_limits <int> :: max ();

J'obtiens ceci (l'avertissement plus 2 erreurs) si j'essaie de reproduire le problème sur un projet C++ propre. Mais sur mon projet openFrameworks, je reçois juste les avertissements. Voilà pourquoi je suis confus !!

39
petersaints

Ajouter #undef max en haut des fichiers concernés.

43
Seth Carnegie

Vous n'êtes pas le premier à être mordu par ces anciennes macros. Ils ne peuvent pas les supprimer, cela casserait l'ancien code. Ils ont donc trouvé une autre macro pour supprimer la piqûre. Faites comme ça:

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