1

以下のコードスニペットをコンパイルしています

cv::Mat frame ;
tld->processImage(frame);

および次のリンカーエラーを取得する

エラー LNK2019: 未解決の外部シンボル "public: void __thiscall tld::TLD::processImage(class cv::Mat)" (?processImage@TLD@tld@@QAEXVMat@cv@@@Z) 関数 _main で参照

今、私はコードをこのようなものに変更しました

Mat frame ;
tld->processImage(0);

リンカエラーの下にある

エラー C2664: 'tld::TLD::processImage' : パラメーター 1 を 'int' から 'cv::Mat' に変換できません コンストラクターがソース型を取得できなかったか、コンストラクターのオーバーロードの解決があいまいでした

問題は、メソッド tld->processImage(frame) を呼び出すときに、このリンカ エラー「未解決のシンボル」が発生することですが、このメソッドをパラメータとして間違った型で呼び出すと、別の「パラメータを変換できません」というエラーが発生し、そのメソッドがその事実を認めていることです。ある。

この問題は、processImage() メソッドでのみ発生します。「tld」の他のメソッドを問題なく呼び出すことができます。

どんな助けでも大歓迎です。

ありがとう

4

2 に答える 2

0

C++コードを実行コードに変換するための 2 つのフェーズがあります。1 つ目はコンパイル、2 つ目はリンクです。最初のフェーズでコンパイラはコード構文を探します。このフェーズではprocessImage、 type の引数を 1 つ取るという名前の関数があることを理解しますcv::Matが、2 番目のフェーズでリンカはその実装を探しますが、それを見つけることができません。そのメソッドを実装したか、それとも単に宣言する??答えが「はい」の場合.cpp、実装を含む source( ) ファイルをリンク プロセスに含めましたか?? 関数が外部ライブラリからのものである場合、リンカーに渡されたライブラリのリストにそのライブラリを含めましたか?? この質問に答えることunresolved external symbolで、リンカーのエラーをいつでも解決できると確信しています:)

于 2012-11-03T19:09:49.750 に答える
0

の参照が欠落している可能性が高いと思いますcv::MatcvTLD クラスが他の場所で動作している場合、このメソッド呼び出しを行っている場所にinclude for がないため、ほぼ確実です。

複数のインクルードがcvある場合は、ヘッダー ファイルの先頭に追加する必要があります。

#ifndef CV
#define CV

そして、ファイルの一番下に追加します。

#endif

これにより、ファイルが一度だけコンパイルされ、C++ を頻繁に書いたときの多くのリンカの問題を解決するために使用されます。

于 2012-11-03T19:13:14.663 に答える