Я использую OpenCV 2.4.2 и Point Cloud Library 1.6.0.
Моя программа работает нормально, пока я не добавлю строку …
#include <pcl/segmentation/segment_differences.h>
Это вызывает ошибки, когда я пытаюсь скомпилировать. Я получил…
Error 93 error C2872: 'flann' : ambiguous symbol C:\Program Files (x86)\PCL 1.6.0\include\pcl-1.6\pcl\kdtree\kdtree_flann.h 424
Error 94 error C2872: 'flann' : ambiguous symbol C:\Program Files (x86)\PCL 1.6.0\include\pcl-1.6\pcl\kdtree\kdtree_flann.h 425
Error 95 error C2872: 'flann' : ambiguous symbol C:\Program Files (x86)\PCL 1.6.0\include\pcl-1.6\pcl\kdtree\kdtree_flann.h 427
Error 96 error C2872: 'flann' : ambiguous symbol C:\Program Files (x86)\PCL 1.6.0\include\pcl-1.6\pcl\kdtree\kdtree_flann.h 514
Error 97 error C2872: 'flann' : ambiguous symbol C:\Program Files (x86)\PCL 1.6.0\include\pcl-1.6\pcl\kdtree\kdtree_flann.h 520
C:\Program Files (x86)\PCL 1.6.0\include\pcl-1.6\pcl/kdtree/kdtree_flann.h(520): error C2872: 'flann' : ambiguous symbol
could be 'flann'
or 'cv::flann'
Таким образом, похоже, что файлы Flann, поставляемые с OpenCV, конфликтуют с файлами Flann в PCL.
Какие-либо предложения?
Здесь есть похожий вопрос
PCL, OpenCV и фланговый конфликт
но это немного другая ошибка …
так в моем файле main.cpp у меня ранее был
использование пространства имен pcl;
используя пространство имен cv;
Я закомментировал эти два и обновил программу для использования cv :: Mat и т. Д.
но я все еще получаю ошибки во время компиляции, когда я добавляю …
#include <pcl/segmentation/segment_differences.h>
C:\Program Files (x86)\PCL 1.6.0\include\pcl-1.6\pcl/kdtree/kdtree_flann.h(520): error C2872: 'flann' : ambiguous symbol
could be 'flann'
or 'cv::flann'
Я только что попытался переименовать include \ opencv2 \ flann \, чтобы включить \ opencv2 \ flanncv \, и обновить include в связке заголовков opencv в этот новый каталог flanncv. Я все еще получаю вышеуказанную ошибку …
Так что исправление для этого без необходимости перестраивать вещи — добавить к нему пустое пространство имен.
изменить экземпляры
Flann :: что-то
в
:: Flann :: что-то
Я думаю, что это эффективно говорит ему использовать глобальное пространство имен, а не пространство имен cv.
Ну, я использую pcl и openCv под Linux, но здесь идет
Проблема состоит в том, что обе библиотеки включают заголовочный файл flann / flann.hpp или что-то подобное, где определено пространство имен flann.
Теперь я не знаю, как библиотеки установлены на вашем компьютере, но я предполагаю, что вы использовали непобедимую версию pcl и openCv, поэтому каждая из них шла со своей собственной фланевой библиотекой.
Обычно в списках CMakeList обеих библиотек есть строка для поиска во фланговых библиотеках, что-то вроде: INCLUDE_LIBRARY ($ (flann) REQUIRED)
Решением может быть удаление двух установленных библиотек pcl и openCv. затем скачайте и установите приложение фланн с их сайта. затем загрузите ночные сборки openCv и pcl, скомпилируйте их, и они оба смогут найти один и тот же экземпляр flann, поэтому проблема может быть решена
Редактировать:
Еще одна идея, может быть, проблема в том, что вы использовали в своем коде:
using namespace pcl;
using namespace cv;
и поэтому у вас есть 2 разных экземпляра из флангового пространства имен. удалите оба «используя пространство имен» и используйте вместо этого в своем коде pcl :: thepclclass, cv :: theopencvclass и посмотрите, поможет ли это
удачи
Решение просто состоит в том, чтобы добавить двойное двоеточие, как это (::
) перед флан
Тогда все будет хорошо работать.
Например, это было:
flann::Matrix<ElementType>(new ElementType[size_*dim_], size_, dim_);
стали:
::flann::Matrix<ElementType>(new ElementType[size_*dim_], size_, dim_);