2012-03-05 17 views
6

Estoy trabajando en un ATL COM dll en C++ y cuando intento hacer uso de una biblioteca obtengo una serie de errores relacionados con min/max como este. También parece causar una serie de otros errores, aunque me imagino que están relacionados con esto.advertencia C4003: no hay suficientes parámetros reales para macro 'min'

1>stdafx.cpp 
1>c:\dropbox\openms-1.6.0\include\openms\datastructures\dposition.h(364) : warning C4003: not enough actual parameters for macro 'min' 
1>c:\dropbox\openms-1.6.0\include\openms\datastructures\dposition.h(366) : warning C4003: not enough actual parameters for macro 'min' 
1>c:\dropbox\openms-1.6.0\include\openms\datastructures\dposition.h(372) : warning C4003: not enough actual parameters for macro 'max' 
1>c:\dropbox\openms-1.6.0\include\openms\datastructures\dposition.h(376) : warning C4003: not enough actual parameters for macro 'max' 
1>c:\dropbox\openms-1.6.0\include\openms\datastructures\dposition.h(378) : warning C4003: not enough actual parameters for macro 'max' 
1>c:\dropbox\openms-1.6.0\include\openms\datastructures\dposition.h(364) : error C2059: syntax error : '(' 
1>  c:\dropbox\openms-1.6.0\include\openms\datastructures\dposition.h(413) : see reference to class template instantiation 'OpenMS::DPosition<D>' being compiled 
1>c:\dropbox\openms-1.6.0\include\openms\datastructures\dposition.h(364) : error C2059: syntax error : ')' 
1>c:\dropbox\openms-1.6.0\include\openms\datastructures\dposition.h(364) : error C2143: syntax error : missing ')' before '?' 
1>c:\dropbox\openms-1.6.0\include\openms\datastructures\dposition.h(364) : error C2143: syntax error : missing ';' before '?' 
1>c:\dropbox\openms-1.6.0\include\openms\datastructures\dposition.h(364) : error C2574: 'OpenMS::DPosition<D>::DPosition(void)' : cannot be declared static 
1>c:\dropbox\openms-1.6.0\include\openms\datastructures\dposition.h(364) : error C2334: unexpected token(s) preceding ':'; skipping apparent function body 
1>c:\dropbox\openms-1.6.0\include\openms\datastructures\dposition.h(376) : error C2059: syntax error : '(' 
1>c:\dropbox\openms-1.6.0\include\openms\datastructures\dposition.h(376) : error C2059: syntax error : ')' 
1>c:\dropbox\openms-1.6.0\include\openms\datastructures\dposition.h(376) : error C2143: syntax error : missing ')' before '?' 
1>c:\dropbox\openms-1.6.0\include\openms\datastructures\dposition.h(376) : error C2143: syntax error : missing ';' before '?' 
1>c:\dropbox\openms-1.6.0\include\openms\datastructures\dposition.h(376) : error C2574: 'OpenMS::DPosition<D>::DPosition(void)' : cannot be declared static 
1>c:\dropbox\openms-1.6.0\include\openms\datastructures\dposition.h(376) : error C2334: unexpected token(s) preceding ':'; skipping apparent function body 
1>c:\dropbox\openms-1.6.0\include\openms\datastructures\dposition.h(364) : error C2059: syntax error : '(' 

la macro en línea en esta cabecera se define como:

/// smallest positive 
    inline static const DPosition 
    min() 
    { 
     return DPosition(std::numeric_limits<typename DPosition::CoordinateType>::min()); 
    } 

De todos modos, he leído varios puestos aquí que discutir este problema e indicar que puedo usar

#define NOMINMAX before #include "windows.h" 

sin embargo, esto no funcionó y sigo recibiendo los errores. No quiero tener que modificar la biblioteca porque es grande y preferiría que mi proyecto no dependiera de una biblioteca personalizada, así que preferiría algún tipo de solución que pueda manejar dentro de mi código dll. ¿Que más puedo hacer?

Respuesta

8

Tal vez colocaste #define NOMINMAX justo antes de incluir directamente "windows.h" pero no antes de algún otro encabezado que lo incluyera? Intente moverlo al mismo comienzo del archivo fuente (si no lo hizo).

+0

Acabo de probar esto. El único lugar donde se incluye window.h es dentro de un archivo de encabezado generado automáticamente, por lo que cualquier cambio se borró. Agregué #define NOMINMAX en mi archivo de encabezado de clase antes de importar este archivo de encabezado creado automáticamente y ese error en particular desapareció. Ahora me queda un problema donde se me agotó la memoria y me pidieron que use la opción/Zm en la línea de comando. Pero ese es un problema aparte que necesito resolver. – Travis

Cuestiones relacionadas