2009-07-20 9 views
5

Si je Comprennent à la fois gtest/gtest.h et boost/math/distributions/poisson.hpp Je reçoisC++ namespace collision avec gtest et stimuler

/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 

Comment puis-je éviter ces deux espaces de noms bibliothèque de se heurter?

Répondre

9

Essayez de construire avec BOOST_HAS_TR1_TUPLE défini. Il ressemble à la fois booster et vos bibliothèques std définissent std::tr1::tuple et je ne vois pas comment désactiver la version std. En regardant l'en-tête de boost, il semble que BOOST_HAS_TR1_TUPLE doit être défini pour indiquer que std::tr1::tuple est déjà défini.

J'ai eu des erreurs semblables à la vôtre quand j'ai essayé de compiler un fichier incluant ces en-têtes et puis ils ont disparu quand j'ai défini BOOST_HAS_TR1_TUPLE.

+0

Cela a fonctionné parfaitement. – bias

+5

Cela dépend de la version du compilateur et de la version gtest. GTest définit également son propre tuple sauf si le compilateur est gcc 4+. Dans ce cas, boost utilisera l'implémentation de gtest, que vous ne voulez probablement pas. Mais vous pouvez également utiliser le tuple boost dans gtest en mettant à 0 GTEST_USE_OWN_TR1_TUPLE. – housemaister

2

Avez-vous essayé de changer l'ordre des inclusions? Il est possible que l'autre fichier d'en-tête gère les choses un peu plus gracieusement.

+0

Malheureusement, changer l'ordre (de gtest/boost pour augmenter/gtest fait un gâchis plus). – bias

1

Pour être en mesure d'inclure boost/math/distributions/fisher_f.hpp dans Microsoft Visual Studio 2010, je devais définir BOOST_NO_0X_HDR_TUPLE ainsi que BOOST_HAS_TR1_TUPLE.

2

Avec GTEST_HAS_TR1_TUPLE de réglage gtest à 0 gtest.h aidé dans mon cas