我一直在寻找,但找不到一些明确的东西。
我正在尝试用 c++ 定义我自己的类,我的类使用 opencv 中的库。
我创建了一个 file.h 文件,我只是在其中声明函数及其保护。
我创建了一个文件.cpp文件,在其中我解释了函数的外观。在这个程序中,我使用了我在普通opencv程序中使用的所有包含。(我认为这是对的)+ 包含文件.h。
通常我编译我的opencv程序,如下所示:
g++ -o program.cpp `pkg-config --cflags opencv` `pkg-config --libs opencv`
现在我尝试编译我的文件.cpp以相同的方式使用主文件中的类,但我得到一个错误。
下一步,一旦我有了编译的类,将是:
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.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库的扩展。
我用新问题移动了问题,似乎:无法编译。头文件。封闭的自己的对象定义
通常,您首先将 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
.
编辑:查看您的代码,您需要执行以下操作:
- 在
segmentator.h
中包含cv::Mat
和cv::Point
的标头。我认为这些会opencv2/core/core.hpp
尽管对我来说opencv/cv.h
OpenCV 2.3.1 上很好。 - 在
segmantator.h
中包含标头vector
- 如果你的
segmentator.c
包含main
函数,你需要在OpenCV库中链接,所以G++ segmentator.cpp -o segmentator pkg-config --cflags opencv pkg-config --libs opencv
-
如果您的
segmentator.c
没有main
,即不能是可执行文件,则可以将其编译为目标文件,以便稍后用于构建应用程序:g++ -c segmentator.cpp pkg-config --cflags opencv