Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

254
Vistas
min y max en C++ heredado

Estoy tratando de compilar un código C++ más antiguo (probablemente de alrededor de 2001-2002) en un sistema estable Debian GNU/Linux. Al compilar me sale el error:

 In file included from /usr/include/c++/4.7/vector:66:0, from ../FooMath/FooBar.h:23, from FooBar.cpp:2: /usr/include/c++/4.7/bits/stl_bvector.h: In member function 'std::vector<bool, _Alloc>::size_type std::vector<bool, _Alloc>::max_size() const': /usr/include/c++/4.7/bits/stl_bvector.h:685:2: error: 'max' is not a member of '__gnu_cxx::__numeric_traits<long int>'

Buscando el problema, me encontré con este fragmento de código en uno de nuestros propios archivos de encabezado, que supongo que está relacionado con este problema:

 #if defined(IRIX) | linux signed max(signed a, signed b); long max(long a, long b); double max(double a, double b); float max(float a, float b); signed min(signed a, signed b); long min(long a, long b); double min(double a, double b); #define __min min #define __max max float min(float a, float b); #endif

y en muchos otros lugares, veo llamadas a una función __max() con dos argumentos.

Supongo que puedo reemplazar todas estas llamadas a __max() con llamadas a std::max() y que debería incluir el encabezado <algorithm> .

Mis dos preguntas son:

  1. ¿Es correcta mi conjetura educada?
  2. Supongo que las declaraciones adicionales y las definiciones de min y max son restos históricos. ¿Alguien sabe la historia de eso? ¿Por qué se necesitaba este código?
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

En la línea 685 en bits/stl_bvector.h tienes:

 __gnu_cxx::__numeric_traits<difference_type>::__max

Su fea macro está reemplazando __max por max , de ahí el error.

Puede reemplazar efectivamente todo su __max en su código por std::max , pero solo para asegurarse de no desmantelar todo, primero puede cambiar el nombre de __max por __my__max , solo para estar seguro (en su macro también). De esa forma, seguirá utilizando las funciones min/max autodefinidas.


Otra solución sería undef su macro antes de incluir encabezados stl y volver a habilitarla después.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda