Я пытаюсь реализовать тестовый проект, используя библиотеку Point Cloud и OpenCV с несколькими файлами.Когда я пытаюсь скомпилировать, я получаю сообщение «уже определена ошибка».Возможно, я делаю что-то глупое, что не может понять по какой-то причине - я попробовал пару решений, найденных здесь, но ни одно из них не помогло в моем случае.
Что у меня есть:
Файл libs.h, куда я загружаю файлы lib (в свойствах Project я только устанавливаю пути .lib и загружаю libs "вручную", как и заголовки):
#pragma once
#ifndef PCLTEST_LIBS
#define PCLTEST_LIBS
#ifdef _DEBUG
#pragma comment(lib, "pcl_apps-gd.lib")
#pragma comment(lib, "pcl_common-gd.lib")
// a bunch of other debug libs
#else
// the release libs
#endif
#endif
AОсновной файл, из которого я в основном удалил все на этом этапе для отладки:
// load the libs
#ifndef PCLTEST_LIBS
#include "libs.h"
#endif
// pcltest includes
// if only this first one is #included, everything is OK
#include "opencvOperations.h"
// #including this one causes the error
#include "files.h"
// these ones are not working also
//#include "cloudOperations.h"
//#include "visualize.h"
// c++ headers
#include <stdio.h>
#include <string>
//#include <sstream>
//#include <iostream>
void writeInfo()
{
// some std::cout calls
}
int main( int argc, char* argv[] )
{
writeInfo();
// this function is in opencvOperations.h and works OK
pcltest::openLena();
}
Затем я получаю несколько сообщений об ошибках в моем main.obj о том, что некоторые (связанные с PCL) символы уже определены в files.obj.Я использую вызовы, связанные с PCL, как в opencvOperations, так и в файлах, первый из них в порядке, второй не работает.
Редактировать: Чтобы добавить больше подробностей, мой заголовок files.h:
#pragma once
#ifndef PCLTEST_FILES
#define PCLTEST_FILES
// pcl headers
#ifndef PCL_COMMON_H_
#include <pcl/common/common_headers.h>
#endif
#ifndef PCL_IO_FILE_IO_H_
#include <pcl/io/file_io.h>
#endif
#ifndef PCL_IO_PCD_IO_H_
#include <pcl/io/pcd_io.h>
#endif
#ifndef PCL_IO_PLY_IO_H_
#include <pcl/io/ply_io.h>
#endif
// boost headers
#ifndef BOOST_FILESYSTEM_OPERATIONSX_HPP
#include <boost/filesystem/operations.hpp>
#endif
#endif
namespace pcltest
{
// function to open PCL or binary PLY files
pcl::PointCloud<pcl::PointXYZ>::Ptr openCloud(std::string filename);
// function to save the point cloud to PCD format
void saveCloud();
}
До разделения кода на отдельные файлы все работало хорошо (с одинаковыми настройками проекта).
Edit2:
Я обнаружилисточник проблемы,
#include <pcl/io/ply_io.h>
вызывает это.На данный момент я избавился от всего, что связано с PLY, и все работает отлично.Я посмотрю на это позже, это может быть специфическая проблема библиотеки PCL.Мне все еще странно, почему этот вызов вызывает ошибку компоновщика в другом файле, где я даже не использую функции / переменные, связанные с PLY.