2011-10-03 13 views
8

estoy recibiendo este error cuando se utiliza stl_vector.h. Estoy en Linux a través de g ++ para compilar.g ++ espera sin reservas-id antes '(' token de

{ 
    if (max_size() - size() < __n) 
    __throw_length_error(__N(__s)); 

    const size_type __len = size() + std::max(size(), __n); //THE ERROR IS ON THIS LINE! 
    return (__len < size() || __len > max_size()) ? max_size() : __len; 
} 

usr/include/c++/4.5/bits/stl_vector.h:1143:40: error: expected unqualified-id before ‘(’ token

No estoy seguro de por qué estoy poniendo este error, he buscado mucho y encontrado algunos problemas 'similares' pero no puedo resolver mina de

EDIT:. así que aquí está el registro de errores:

In file included from /usr/include/c++/4.5/vector:65:0, 
      from ../../RL_Toolbox/include/caction.h:34, 
      from ../../RL_Toolbox/include/cagent.h:35, 
      from shortestpathQLearning.cpp:42: 
/usr/include/c++/4.5/bits/stl_vector.h:1143:40: error: expected unqualified-id before ‘(’ token 

Se puede ver en el registro de error anterior que "vector" es llamado por el encabezado "caction.h" de esta manera:

//THESE ARE THE INCLUDES IN "caction.h" 
#ifndef CACTION_H 
#define CACTION_H 
#include <stdio.h> 
#include <vector> //HERE IT CALLS <vector> 
#include <list> 
#include <map> 
#include "cbaseobjects.h" 

continuación vector llamadas bits/stl_vector.h así:

#ifndef _GLIBCXX_VECTOR 
#define _GLIBCXX_VECTOR 1 

#pragma GCC system_header 

#include <bits/stl_algobase.h> 
#include <bits/allocator.h> 
#include <bits/stl_construct.h> 
#include <bits/stl_uninitialized.h> 
#include <bits/stl_vector.h>//HERE IT CALLS stl_vector.h 
#include <bits/stl_bvector.h> //Im actually getting the exact same error from stl_vector.h on this header 

solo los últimos 2 encabezados del vector (stl_vector y stl_bvector) me dan exactamente el mismo error, el resto está bien. ¿Algunas ideas?

Gracias de antemano por su ayuda.

+9

¿Tiene un '#define max' o algo así en alguna parte? – user786653

+0

Simplemente adivinando, pero intente eliminar la const. – Dabbler

+5

¿Está incluyendo 'stl_vector.h' directamente o el encabezado' vector' –

Respuesta

1

Nunca use identificadores que comiencen con un doble guión bajo o un guión bajo seguido de una letra mayúscula, a menos que sean proporcionados por la implementación.

El compilador y/o biblioteca estándar están autorizados a utilizar __N, __s, __len, y así sucesivamente, en la forma que deseen.

No es obvio que ese es su problema, pero vea qué pasa si cambia todos esos identificadores.

EDITAR: yo estaba equivocado, el código que envió es parte de la aplicación, por lo que su uso de identificadores reservadas es perfectamente apropiado.

/usr/include/c++/4.5/bits/stl_vector.h en mi sistema contiene el mismo código. Lo más probable es que algo en su propio código esté causando el error. Por ejemplo, si lo hago

#include <bits/stl_vector.h> 

Obtengo 156 errores. La forma correcta es

#include <vector> 

pero si #define ciertas macros antes de la #include <vector> que podría causar el problema se está viendo.

Muéstranos tu código, preferiblemente reducido al archivo fuente más pequeño que muestra el error.

+3

Muestra el código que viene con la biblioteca estándar de su compilador, por lo que no puede cambiarlo, ni él tampoco. – ildjarn

+0

@ildjarn: Muy bien, gracias. Debería haberlo notado yo mismo. –

+0

@KeithThompson Agregué una explicación más detallada. Muchas gracias por tu ayuda – user977480

2

user977480, dado que usted ha dicho "estoy recibiendo este error cuando se utiliza stl_vector.h", supongo que significa que su código está usando algo así como #include <bits/stl_vector.h> o #include <c++/4.5/bits/stl_vector.h>.

Esta declaración #include es la causa de su problema. Necesitará usar #include <vector> en su lugar. stl_vector.h es un detalle de implementación y no funciona por sí mismo.El archivo de encabezado vector incluye bits/stl_vector.h después de haber incluido algunos otros archivos de detalles de implementación, incluido el que define std::max.

+0

Oye, agregué un poco más de explicación sobre este error en la publicación principal, estoy usando #include pero luego cuando vector llama a ese encabezado eso es cuando obtengo el error del compilador. – user977480

9

Esto puede deberse a que el preprocesador haya dañado su código, probablemente porque tiene macro max definida. Esto puede suceder con la biblioteca C, porque generalmente el estándar C permite que las funciones de biblioteca estándar C sean en realidad macros (aunque solo he visto tal error en MSVC).

Para verificación, se puede

  • preproceso la fuente con gcc -E y buscar la salida para el código correspondiente. Verifica si no está dañado.
  • agregue una línea #undef max antes de #include <vector> y vea si esto ayuda.
+3

Gracias, #undef max solucionó el problema:) – user977480

+1

Esto me salvó, estaba usando el código de otra persona y no tenía idea de lo que estaba pasando. – diedthreetimes

+0

Esto resuelve mi problema. Obteniendo el mismo error en linux g ++. Esto se debió a que la macro "max" está definida en mi código. Este error desaparece, después de cambiar el nombre de esta macro. – rashok

Cuestiones relacionadas