在這裏,我與上次有一個類似的問題,我找不到任何答案。不可能編譯。頭文件。包含自己的對象定義
注意,我認爲重要的是:通常情況下我編譯我的程序在OpenCV中下一個命令:
g++ -o def program.cpp `pkg-config --cflags opencv` `pkg-config --libs opencv`
這條線將創建一個可執行文件的名字將是高清和我將能夠使用。
我在一個項目中工作,隨着它變得越來越大,我不得不定義一些對象,只是爲了讓所有事情變得更容易和可能。我創建了一個文件對象:homogra.cpp和homogra.h我用它的COMAND是:
g++ -c homogra.cpp `pkg-config --cflags opencv` `pkg-config --libs opencv`
然後,我在寫program.cpp行的#include「homogra.h」
我喜歡編譯:
g++ -o def program.cpp homogra.o `pkg-config --cflags opencv` `pkg-config --libs opencv`
到現在爲止一切工作正常。
然後我創建了第二個對象(使用與homogra相同的編譯行,但是這次使用了segmentator.cpp和segmentator.h),我編寫了行#include「segmentator.h」(在program.cpp )和我編譯像:
g++ -o def program.cpp .o segmentator.o `pkg-config --cflags opencv` `pkg-config --libs opencv`
現在它不工作,它不識別分割器。我已經檢查過,如果分割器工作正常,並且一切正常,如果homogra是program.cpp中唯一包含的。
我注意到一些奇怪的東西。如果我改變了線,我寫之前,在行#include,#包括「segmentator.h」,然後#包括「homogra.h」,那麼編譯器,與同一行編譯:
g++ -o def program.cpp homogra.o segmentator.o `pkg-config --cflags opencv` `pkg-config --libs opencv`
只能識別這個時間分段而不是同形。這可能有點難以理解,我試圖儘可能更好地解釋它。
任何幫助!?
非常感謝提前。
這裏是homogra.h:
using namespace cv;
using namespace std;
#ifndef _NAMES_H
#define _NAMES_H
class homogra {
public:
Mat matCalculation(Mat img, Mat img2);
void printMatrix(Mat matrix);
};
#endif
在homogra.cpp我所有的tipical包括和homogra.h:
#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 "homogra.h"
然後是功能解釋。
對象2是segmentator.h
using namespace cv;
using namespace std;
#ifndef _NAMES_H
#define _NAMES_H
class segmentator {
public:
void search(Mat img,vector<std::vector<cv::Point> >& contours);
void similar(vector<std::vector<cv::Point> >& contours,vector<std::vector<cv::Point> >& contours2,vector<int>& idx);
vector<Mat> separate(Mat img,Mat img2,vector<std::vector<cv::Point> >& contours,vector<std::vector<cv::Point> >& contours2,vector<int> idx);
};
#endif
而在segmentator.cpp我又都是一樣的包括,除了homogra.h而是這個我有segmentator.h的。
Program.cpp是image_reg。CPP:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <sstream>
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/calib3d/calib3d.hpp"
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include "homogra.h"
#include "segmentator.h"
using namespace cv;
using namespace std;
int main(int argc, char ** argv)
{ //Here is the code where I try to invoque two instances of homogra and segmentator.
}
如果我讓homogra.h作爲第一個在包括image_reg.cpp的名單,然後只homogra.h是公認的,如果我讓在第一位置segmentator,那麼只有segmentator被讀取。 h實例將被創建並同步。 h不會被識別。
謝謝
你如何創建object2?您省略了該調用。 – RedX
「現在它不工作,它不識別object2。」 - 你會得到什麼錯誤信息? – wolfgang
Object2的創建方式與對象1相同,如下所示:g ++ -c object2.cpp'pkg-config --cflags opencv''pkg-config --libs opencv' –