0

我一直在寻找,但找不到明确的疑问。

我正在尝试在 C++ 中定义我自己的类,我的类使用来自 opencv 的库。

我创建了一个 file.h 文件,我只是在其中声明了函数及其保护。

我创建了一个 file.cpp 文件,我在其中解释了函数的外观。在这个程序中,我使用了在普通 opencv 程序中使用的所有包含。(我认为它是正确的)+ 包含 file.h。

通常我编译我的opencv程序,如:

g++ -o program.cpp `pkg-config --cflags opencv` `pkg-config --libs opencv`

现在我尝试以相同的方式编译我的 file.cpp,以便在 oder 主文件中使用该类,但我得到一个错误。

下一步,一旦我有了编译的类,将是:

g++ -o programMain.cpp compiledClass.o `pkg-config --cflags opencv` `pkg-config --libs opencv`

任何帮助/建议都会很好,因为这是我第一次管理这么大的程序。

#ifndef _NAMES_H  
#define _NAMES_H     

class segmentator {
public:
      
   void search(Mat img,
               vector<std::vector<cv::Point> >&contours,
               vector<int>&similarity);
   
   void similar(vector<std::vector<cv::Point> >&contours,
                vector<std::vector<cv::Point> >&contours2,
                vector<int>&similarity);
   
   vector<Mat*> separate(Mat img,
                         Mat img2,
                         vector<std::vector<cv::Point> >&contours,
                         vector<std::vector<cv::Point> >& contours2,
                         vector<int> idx);
};

#endif

这是我的文件segmentator.h。

在 segmentator.c 我有:

#include <stdio.h>
#include <stdlib.h>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
#include <sstream>
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/calib3d/calib3d.hpp"
#include "segmentator.h"

void segmentator::search(/*parameters*/){/*CODE*/}
void segmentator::similar(/*parameters*/){/*CODE*/}
vector<Mat*> separate(/*parameters*/){/*CODE*/}

然后我像这样编译

g++ -o segmentator.cpp `pkg-config --cflags opencv`

并且它不识别 opencv 库的扩展。

我用出现的新问题移动了这个问题:无法编译。头文件。封闭自己的对象定义

4

1 回答 1

1

通常,您首先将 file.cpp 编译为目标文件:

g++ -c file.cpp pkg-config --cflags opencv

这会产生file.o,然后您可以使用它来编译和链接主要内容:

g++ programMain.cpp file.o -o programMain pkg-config --cflags opencv pkg-config --libs opencv

您应该将包含的内容限制为file.h您严格需要的内容。同样对于file.cpp.

编辑:查看您的代码,您需要执行以下操作:

  • 包括cv::Matcv::Pointin的标题segmentator.h。我认为这些会是opencv2/core/core.hpp虽然对我opencv/cv.h来说在 OpenCV 2.3.1 上很好。
  • 将标题包含vectorsegmantator.h
  • 如果你segmentator.c包含一个main函数,你需要在 OpenCV 库中链接,所以

    g++ 分段器.cpp -o 分段器 pkg-config --cflags opencv pkg-config --libs opencv

  • 如果您segmentator.c没有main,即不能是可执行文件,则可以将其编译为目标文件,以后可以使用该文件来构建应用程序:

    g++ -c segmentator.cpp pkg-config --cflags opencv

于 2012-05-23T09:48:20.860 回答