Я использую Armadillo в качестве моей матричной библиотеки. В то же время я использую OpenFrameworks для разработки своих кодов. Когда я пытаюсь использовать ofxOpenCv вместе с Armadillo, я получаю следующие ошибки:
/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: ошибка: «cv ::» является / использует анонимный тип
/usr/include/armadillo_bits/traits.hpp:584:28: ошибка: попытка создания экземпляра ‘template struct arma :: is_subview_elem2’
/usr/include/armadillo_bits/traits.hpp:584:28: ошибка: «cv ::» является / использует анонимный тип
,
,
,
Мне кажется, что существует конфликт между Armadillo и ofxOpenCv, но я не уверен, как решить эту проблему.
Кто-нибудь может дать несколько советов, чтобы решить эту проблему?
С Уважением,
Tohid
Похоже, что вы загрязнили свое пространство имен, вызвав «использование пространства имен arma» в одном или нескольких заголовочных файлах, прежде чем включать другую библиотеку (см. Принятый ответ на Конфликт между библиотеками Boost, OpenCV и Eigen?).
Вы не должны использовать директиву using в заголовочных файлах, поскольку в зависимости от порядка их включения вы можете включить этот заголовочный файл, а затем другой заголовочный файл, определения класса которого зависят от незагрязненного пространства имен.
Так где их поставить? C ++ не позволяет вам помещать их в определение класса, потому что это может вызвать неоднозначность с областью видимости. Вам разрешено писать «используя пространство имен» внутри определения функции-члена класса, поэтому я рекомендую делать это везде, где вам нужны ваши структуры данных броненосца. Повсюду, просто сфокусируйтесь, например arma :: colvec или arma :: mat и т. д.
Других решений пока нет …