2009-07-20 7 views
5

Si incluyo tanto GTEST/gtest.h y realce/matemáticas/distribución/poisson.hpp me saleC++ espacio de nombres colisión con GTEST e impulsar

/opt/local/include/boost/tr1/tuple.hpp:63: error: ‘tuple’ is already declared in this scope 
/opt/local/include/boost/tr1/tuple.hpp:67: error: ‘make_tuple’ is already declared in this scope 
/opt/local/include/boost/tr1/tuple.hpp:68: error: ‘tie’ is already declared in this scope 
/opt/local/include/boost/tr1/tuple.hpp:68: error: ‘tie’ is already declared in this scope 
/opt/local/include/boost/tr1/tuple.hpp:68: error: ‘tie’ is already declared in this scope 
/opt/local/include/boost/tr1/tuple.hpp:68: error: ‘tie’ is already declared in this scope 
/opt/local/include/boost/tr1/tuple.hpp:68: error: ‘tie’ is already declared in this scope 
/opt/local/include/boost/tr1/tuple.hpp:68: error: ‘tie’ is already declared in this scope 
/opt/local/include/boost/tr1/tuple.hpp:68: error: ‘tie’ is already declared in this scope 
/opt/local/include/boost/tr1/tuple.hpp:68: error: ‘tie’ is already declared in this scope 
/opt/local/include/boost/tr1/tuple.hpp:68: error: ‘tie’ is already declared in this scope 
/opt/local/include/boost/tr1/tuple.hpp:68: error: ‘tie’ is already declared in this scope 
/opt/local/include/boost/tr1/tuple.hpp:72: error: ‘tuple_size’ is already declared in this scope 
/opt/local/include/boost/tr1/tuple.hpp:73: error: ‘tuple_element’ is already declared in this scope 

¿Cómo evito que estos dos espacios de nombres biblioteca de colisionar?

Respuesta

9

Intente construir con BOOST_HAS_TR1_TUPLE definido. Parece que tanto boost como sus bibliotecas std están definiendo std::tr1::tuple y no veo cómo deshabilitar la versión std. Si miramos el encabezado de boost, parece que BOOST_HAS_TR1_TUPLE debe definirse para indicarle a boost que std::tr1::tuple ya está definido.

Recibí errores similares a los suyos cuando traté de compilar un archivo que incluyera ambos encabezados y luego desaparecieron cuando definí BOOST_HAS_TR1_TUPLE.

+0

Eso funcionó perfecto. – bias

+5

Esto depende de la versión del compilador y de la versión de prueba. GTest también define su propia tupla a menos que el compilador sea gcc 4+. Entonces, en este caso, boost usaría la implementación de gtest, que probablemente no desee. Pero puede usar la tupla boost en gtest también estableciendo GTEST_USE_OWN_TR1_TUPLE en 0. – housemaister

2

¿Has intentado cambiar el orden de los includes? Es posible que el otro archivo de encabezado maneje las cosas un poco más elegantemente.

+0

Desafortunadamente, cambiando el orden (de GTEST/refuerzo para aumentar/GTEST hace un lío más grande). – bias

1

Para poder incluir realce/matemáticas/distribución/fisher_f.hpp en Microsoft Visual Studio 2010, que necesitaba para definir BOOST_NO_0X_HDR_TUPLE, así como BOOST_HAS_TR1_TUPLE.

2

Con GTEST GTEST_HAS_TR1_TUPLE ajuste a 0 en gtest.h ayudaron en mi caso

Cuestiones relacionadas