2013-03-10 3 views
-1

Я использую Armadillo в качестве моей матричной библиотеки. В то же время я использую OpenFrameworks для разработки моих кодов. Когда я пытаюсь использовать ofxOpenCv вместе с Армадилло, я получаю следующие ошибки:конфликт между Armadillo и ofxOpenCv

/usr/include/armadillo_bits/traits.hpp: В глобальном масштабе: /usr/include/armadillo_bits/traits.hpp: В конкретизации 'const bool arma :: is_arma_type> :: value': ../../../addons/ofxOpenCv/libs/opencv/include/opencv2/core/operations.hpp:753:23: экземпляр отсюда /usr/include/armadillo_bits/traits.hpp: 584: 28: error: 'cv ::' is/использует анонимный тип /usr/include/armadillo_bits/traits.hpp:584:28: ошибка: попытка создать экземпляр 'struct struct arma :: is_subview_elem2 ' /usr/include/armadillo_bits/traits.hpp:584:28: error:' cv :: 'is/использует анонимный тип . . . Мне кажется, что существует конфликт между Armadillo и ofxOpenCv, но я не уверен, как решить эту проблему. Может кто-нибудь дать некоторые подсказки для решения этой проблемы? С уважением, Tohid

ответ

2

Похоже, что вы осквернили пространство имен с помощью вызова «с использованием пространства имен АРМА» в одном или нескольких файлах заголовков, прежде чем включать вашу другую библиотеку (см принятый ответ на Conflict between Boost, OpenCV and Eigen libraries?).

Вы не должны использовать директиву «using ...» в заголовочных файлах, потому что в зависимости от того, в каком порядке вы включаете их, вы можете включить этот заголовочный файл, а затем другой заголовочный файл, определения классов которого зависят от незагрязненного пространства имен.

А где их положить? C++ не позволяет помещать их в определение класса, поскольку это может вызвать неоднозначность области. Вы можете написать «using namespace» внутри определения функции члена класса, поэтому я бы рекомендовал делать это везде, где вам нужны ваши структуры данных armadillo. В другом месте, просто охватите его, например. arma :: colvec или arma :: мат и т. д.

Смежные вопросы