2009-07-20 4 views
5

Если я включаю как GTEST/gtest.h и повысить/математика/распределения/poisson.hpp Я получаюC++ имен столкновения с GTEST и повысить

/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 

Как предотвратить эти две библиотеки пространств имен от столкновения?

ответ

9

Попробуйте построить с BOOST_HAS_TR1_TUPLE. Похоже, что и boost, и ваши std библиотеки определяют std::tr1::tuple, и я не вижу, как отключить версию std. Глядя на заголовок boost, хотя кажется, что BOOST_HAS_TR1_TUPLE необходимо определить, чтобы сообщить boost, что std::tr1::tuple уже определен.

У меня были схожие ошибки с вашими, когда я попытался скомпилировать файл, включая оба эти заголовка, а затем они исчезли, когда я определил BOOST_HAS_TR1_TUPLE.

+0

Это сработало отлично. – bias

+5

Это зависит от версии компилятора и от самой последней версии. GTest также определяет свой собственный кортеж, если компилятор не является gcc 4+. Поэтому в этом случае boost будет использовать gtest-реализацию, которую вы, вероятно, не хотите. Но вы можете использовать форсированный кортеж в gtest также, установив GTEST_USE_OWN_TR1_TUPLE в 0. – housemaister

2

Вы пробовали переключение порядка входящих в комплект? Возможно, другой файл заголовка обрабатывает вещи немного более изящно.

+0

К сожалению, изменение порядка (от GTEST/импульс для увеличения/GTEST делает больший беспорядок). – bias

1

Чтобы иметь возможность включать усиление/математика/распределения/fisher_f.hpp в Microsoft Visual Studio 2010, мне нужно определить BOOST_NO_0X_HDR_TUPLE, а также BOOST_HAS_TR1_TUPLE.

2

С GTEST установки GTEST_HAS_TR1_TUPLE до 0 в gtest.h помогли в моем случае