0

を使用して顔認識プログラムを作成していますが、何らかのエラーがあり、解決方法がわかりません...

Mat im = data.get_image(i,0); if(im.empty())continue; //Unresolved external symbol
vector<Point2f> p = data.get_points(i,false); int n = p.size(); //Unresolved external symbol

これは私が得るエラーです

Error   3   error LNK2019: unresolved external symbol "public: class cv::Mat __thiscall ft_data::get_image(int,int)" (?get_image@ft_data@@QAE?AVMat@cv@@HH@Z) referenced in function "public: void __thiscall face_detector::train(class ft_data &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class cv::Mat const &,bool,bool,float,float,int,class cv::Size_<int>)" (?train@face_detector@@QAEXAAVft_data@@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABVMat@cv@@_N3MMHV?$Size_@H@6@@Z)    D:\Workshop\Final\C++ Console Application\AAM-Raw\AAM-Raw\AAM-Raw.obj   AAM-Raw
Error   4   error LNK2019: unresolved external symbol "public: class std::vector<class cv::Point_<float>,class std::allocator<class cv::Point_<float> > > __thiscall ft_data::get_points(int,bool)" (?get_points@ft_data@@QAE?AV?$vector@V?$Point_@M@cv@@V?$allocator@V?$Point_@M@cv@@@std@@@std@@H_N@Z) referenced in function "public: void __thiscall face_detector::train(class ft_data &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class cv::Mat const &,bool,bool,float,float,int,class cv::Size_<int>)" (?train@face_detector@@QAEXAAVft_data@@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABVMat@cv@@_N3MMHV?$Size_@H@6@@Z) D:\Workshop\Final\C++ Console Application\AAM-Raw\AAM-Raw\AAM-Raw.obj   AAM-Raw

置く前にエラーは表示されません#include <GL/glext.h>。バリアベルを宣言するにはそのヘッダーが必要です

Visual Studio 2012 と c++ コンソール アプリケーションを使用しています

4

2 に答える 2

0

64 ビット バージョンの OpenCV ライブラリを使用している場合、または 64 ビット構成を使用してコンパイルされた OpenCV を使用している場合は、ビデオ スタジオ プロジェクトを 64 ビットに切り替えることを忘れないでください。

Visual Studio では、32 ビット プロジェクトで 64 ビット ライブラリを使用しようとすると、未解決の外部エラーが発生します。これは、正しいライブラリが含まれているため、非常に混乱します。少なくとも名前で。

于 2015-07-06T23:30:12.153 に答える
0

あなたの問題は、これらの問題のいずれかである可能性があります。関連する問題を見つけて、解決に進んでください。私はあなたの完全なコードを持っていないので、どちらが問題なのかわかりません.

trainソースコードの関数が原因で問題が発生すると思います。そのコードで以下の問題を探すことをお勧めします。おそらく、グローバル定数の問題がありますが、関数本体または変数が欠落している可能性もあります。

グローバル定数:

C++ グローバル定数には静的リンケージがあります。これは C とは異なります。C++ でグローバル定数を複数のファイルで使用しようとすると、未解決の外部エラーが発生します。コンパイラはグローバル定数を最適化し、変数用に予約されたスペースを残しません。このエラーを解決する 1 つの方法は、ヘッダー ファイルに const の初期化を含め、必要に応じてそのヘッダーを関数プロトタイプのように CPP ファイルに含めることです。もう 1 つの可能性は、変数を非定数にし、それを評価するときに定数参照を使用することです。

関数本体または変数がありません

関数プロトタイプのみを使用すると、コンパイラはエラーなしで続行できますが、リンカーはアドレスへの呼び出しを解決できません。これは、予約されている関数コードまたは変数スペースがないためです。リンカーが解決する必要がある関数への呼び出しを作成するまで、このエラーは表示されません。

自動 (関数スコープ) 変数

関数内で宣言された変数は、その関数のスコープ内でのみ使用できます。

関数のインライン化の問題

関数のインライン化を使用している場合は、次のことを行う必要があります。

  • インクルードするヘッダー ファイルにインライン関数を実装します。

  • ヘッダー ファイルでインライン化をオンにします。

#pragma inline_depth コンパイラ ディレクティブを使用している場合は、2 以上の値が設定されていることを確認してください。ゼロの値は、インライン化をオフにします。また、/Ob1 または /Ob2 コンパイラ オプションを使用していることを確認してください。異なるモジュールでインライン コンパイル オプションと非インライン コンパイル オプションを混在させると、問題が発生することがあります。関数のインライン化をオン (/Ob1 または /Ob2) にして C++ ライブラリを作成したが、関数を記述する対応するヘッダー ファイルのインライン化がオフ (オプションなし) の場合、エラー LNK2001 が発生します。関数はヘッダー ファイルからコードにインライン化されませんが、ライブラリ ファイルにないため、参照を解決するためのアドレスがありません。同様に、関数のインライン化を使用しているにもかかわらず、ヘッダー ファイルではなく .cpp ファイルで関数を定義しているプロジェクトも、LNK2019 を取得します。ヘッダー ファイルは適切と思われるすべての場所に含まれますが、関数は .cpp ファイルがコンパイラを通過するときにのみインライン化されます。したがって、リンカは、他のモジュールで使用される場合、関数を未解決の外部として認識します。

于 2013-07-23T08:29:40.020 に答える