0

私は C++ をほとんど知りませんが、プロジェクトのビルドの問題を解決するために助けが必要です。プロジェクトを作成すると、いくつかの関数があいまいであるというエラーが表示されます。「異なる引数または異なる数の引数を取る関数の他のバージョンがあることを意味します」という意味を明確に理解していますが、C++での経験が少ないため、解決方法がわかりません。だからこそ、ここで助けを求めているのです。

私が持っているエラーは次のとおりです。

C:\opencv-build\modules\java\core.cpp:172:65: error: call of overloaded 'PCACompute(cv::Mat&, cv::Mat&, cv::Mat&, jint&)' is ambiguous
    C:\opencv-build\modules\java\core.cpp:172:65: note: candidates are:
    In file included from c:/opencv-git/modules/java/generator/src/cpp/converters.h:4:0,
                     from C:\opencv-build\modules\java\core.cpp:8:
    c:/opencv-git/modules/core/include/opencv2/core/core.hpp:2383:19: note: void cv::PCACompute(cv::InputArray, cv::InputOutputArray, cv::OutputArray, int)
    c:/opencv-git/modules/core/include/opencv2/core/core.hpp:2386:19: note: void cv::PCACompute(cv::InputArray, cv::InputOutputArray, cv::OutputArray, double)
    C:\opencv-build\modules\java\core.cpp: In function 'void Java_org_opencv_core_Algorithm_setInt_10(JNIEnv*, jclass, jlong, jstring, jint)':
    C:\opencv-build\modules\java\core.cpp:6219:32: error: call of overloaded 'set(std::string&, jint&)' is ambiguous
    C:\opencv-build\modules\java\core.cpp:6219:32: note: candidates are:
    In file included from c:/opencv-git/modules/java/generator/src/cpp/converters.h:4:0,
                     from C:\opencv-build\modules\java\core.cpp:8:
    c:/opencv-git/modules/core/include/opencv2/core/core.hpp:4328:29: note: void cv::Algorithm::set(const string&, int)
    c:/opencv-git/modules/core/include/opencv2/core/core.hpp:4329:32: note: void cv::Algorithm::set(const string&, double)
    c:/opencv-git/modules/core/include/opencv2/core/core.hpp:4330:30: note: void cv::Algorithm::set(const string&, bool)
    c:/opencv-git/modules/core/include/opencv2/core/core.hpp:4331:32: note: void cv::Algorithm::set(const string&, const string&) <near match>
    c:/opencv-git/modules/core/include/opencv2/core/core.hpp:4331:32: note:   no known conversion for argument 2 from 'jint {aka long int}' to 'const string& {aka const std::basic_string<char>&}'
    c:/opencv-git/modules/core/include/opencv2/core/core.hpp:4332:29: note: void cv::Algorithm::set(const string&, const cv::Mat&) <near match>
    c:/opencv-git/modules/core/include/opencv2/core/core.hpp:4332:29: note:   no known conversion for argument 2 from 'jint {aka long int}' to 'const cv::Mat&'
    c:/opencv-git/modules/core/include/opencv2/core/core.hpp:4334:35: note: void cv::Algorithm::set(const string&, const cv::Ptr<cv::Algorithm>&) <near match>
    c:/opencv-git/modules/core/include/opencv2/core/core.hpp:4334:35: note:   no known conversion for argument 2 from 'jint {aka long int}' to 'const cv::Ptr<cv::Algorithm>&'

さらに情報/コードが必要な場合は、お知らせください。質問を更新します。

4

3 に答える 3

4

jintへの typedef ですlong int('jint {aka long int}'下の行を参照)。 は(同じ表現を持っている場合でも)long intとは異なる型であるため、コンパイラはそのパラメーターで と を使用するオーバーロードを決定できません。intintdouble

あなたがWindows上にいるように見え、同じ表現intlong int持っているので(64ビットWindowsはLLP64データモデルを使用するため)、次のことができます:

  • の代わりにjint使用するの定義を含むプロジェクトを構成する、またはintlong int
  • long intそれをオーバーロードに転送するオーバーロードを追加するint、または
  • あいまいな関数を呼び出すすべての場所にjint引数をキャストしますint
于 2012-10-12T13:14:30.447 に答える
2

メソッドの最後のパラメーターの正しい型を指定する必要があります。

あなたが電話するとしましょう:

最後のパラメーターが 5 の PCACompute(cv::Mat&, cv::Mat&, cv::Mat&, jint&)

そして、コンパイラは何を選択するかを知りません:

void cv::PCACompute(cv::InputArray, cv::InputOutputArray, cv::OutputArray, int) void cv::PCACompute(cv::InputArray, cv::InputOutputArray, cv::OutputArray, double)

5 は int または double として解釈できるためです。最後のパラメーターを (int) または (double) に明示的に変換する必要があります。そうすれば、コンパイラーは正しい選択を行います。

于 2012-10-12T13:16:05.147 に答える
0

ビルド エラーは問題を示しています。

PCACompute(cv::Mat&, cv::Mat&, cv::Mat&, jint&) の呼び出しはサポートされていません。これは、同じ関数名 (および可能なパラメーターの型) を持つ唯一の可能な関数が以下にリストされている関数であるためです。これは、間違ったパラメーター タイプで同じ名前の関数を呼び出していることを意味します。

void cv::PCACompute(cv::InputArray, cv::InputOutputArray, cv::OutputArray, int)
void cv::PCACompute(cv::InputArray, cv::InputOutputArray, cv::OutputArray, double)
于 2012-10-12T13:11:50.660 に答える