2009-07-20 9 views
5

Wenn ich beide Gtest/gtest.h und boost/math/Verteilungen/poisson.hpp umfassen IC++ Namespace-Konflikt mit Gtest und steigern

/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 

bekommen Wie verhindere ich diese beiden Bibliothek Namespaces vom Zusammenstoß?

Antwort

9

Versuchen Sie Gebäude mit BOOST_HAS_TR1_TUPLE definiert. Es sieht aus wie Boost und Ihre std Bibliotheken definieren std::tr1::tuple und ich kann nicht sehen, wie die std Version zu deaktivieren. Betrachtet man den Boost-Header, so scheint es, dass BOOST_HAS_TR1_TUPLE definiert werden muss, um Boost mitzuteilen, dass std::tr1::tuple bereits definiert ist.

Ich habe ähnliche Fehler wie Sie, als ich versuchte, eine Datei mit diesen Headern zu kompilieren, und sie verschwanden, als ich BOOST_HAS_TR1_TUPLE definierte.

+0

Das hat perfekt funktioniert. – bias

+5

Dies hängt von der Compiler-Version und von der gtest-Version ab. GTest definiert auch ein eigenes Tupel, es sei denn, der Compiler ist gcc 4+. In diesem Fall würde Boost die gtest-Implementierung verwenden, die Sie wahrscheinlich nicht möchten. Sie können das Boost-Tupel in gtest jedoch auch verwenden, indem Sie GTEST_USE_OWN_TR1_TUPLE auf 0 setzen. – housemaister

2

Haben Sie versucht, die Reihenfolge der Includes zu wechseln? Es ist möglich, dass die andere Header-Datei die Dinge etwas eleganter behandelt.

+0

Leider Änderung der Reihenfolge (von Gtest/Boost zu erhöhen/Gtest eine größere Unordnung macht). – bias

1

Um boost/math/Distributionen/fisher_f.hpp in Microsoft Visual Studio 2010, ich BOOST_NO_0X_HDR_TUPLE sowie BOOST_HAS_TR1_TUPLE zu definieren, benötigt aufzunehmen.

2

Mit Gtest Einstellung GTEST_HAS_TR1_TUPLE auf 0 in gtest.h geholfen in meinem Fall

Verwandte Themen