2009-07-20 2 views
5

Se includo sia GTEST/gtest.h e boost/math/distribuzioni/poisson.hpp ottengoC++ namespace collisione con GTEST e dare impulso

/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 

Come posso evitare di questi due spazi dei nomi di libreria dalla collisione?

risposta

9

Provare a costruire con BOOST_HAS_TR1_TUPLE definito. Sembra che sia l'amplificazione che le tue librerie std definiscono std::tr1::tuple e non riesco a vedere come disabilitare la versione std. Se si guarda l'intestazione boost, sembra che sia necessario definire per indicare che il valore std::tr1::tuple è già definito.

Ho avuto errori simili ai tuoi quando ho provato a compilare un file che includeva entrambe quelle intestazioni e poi sono scomparsi quando ho definito BOOST_HAS_TR1_TUPLE.

+0

Che ha funzionato perfettamente. – bias

+5

Dipende dalla versione del compilatore e dalla versione gtest. GTest definisce anche la propria tupla a meno che il compilatore non sia gcc 4+. Quindi in questo caso boost userebbe l'implementazione gtest, che probabilmente non vuoi. Ma puoi usare la tupla boost in gtest anche impostando GTEST_USE_OWN_TR1_TUPLE a 0. – housemaister

2

Hai provato a cambiare l'ordine degli include? È possibile che l'altro file di intestazione gestisca le cose in modo un po 'più elegante.

+0

Purtroppo, cambiando l'ordine (da GTEST/boost per aumentare/GTEST fa un pasticcio più grande). – bias

1

Per essere in grado di includere boost/math/distribuzioni/fisher_f.hpp in Microsoft Visual Studio 2010, avevo bisogno di definire BOOST_NO_0X_HDR_TUPLE così come BOOST_HAS_TR1_TUPLE.

2

Con GTEST GTEST_HAS_TR1_TUPLE impostazione a 0 in gtest.h aiutato nel mio caso