我一直在寻找,但找不到可以解决我的疑问的东西。
我正在尝试用 C++ 定义我自己的类,我的类使用 opencv 中的库。
我创建了一个 file.h 文件,我只在其中声明函数及其守卫。
我创建了一个 file.cpp 文件,我在其中解释了函数的外观。在这个程序中,我使用了我将在普通 opencv 程序中使用的所有包含。 (我认为是对的)+ include file.h。
通常我会像这样编译我的 opencv 程序:
g++ -o program.cpp `pkg-config --cflags opencv` `pkg-config --libs opencv`
现在我尝试以相同的方式编译我的 file.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.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 库的扩展。
我将问题与出现的新问题移动到:Not possible to compile. Headers files.Enclosed own objects definition
最佳答案
通常,您会先将 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
的 header 。我假设这些将是opencv2/core/core.hpp
虽然对我来说opencv/cv.h
在 OpenCV 2.3.1 上很好。 - 在
segmantator.h
中包含 headervector
- 如果您的
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
关于c++ - 使用opencv编译头文件。自己的类定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10717178/