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是一种不同的类型int(即使它们具有相同的表示形式),因此编译器无法在该参数中的重载int之间做出决定。double

由于您似乎在 Windows 上,int并且long int具有相同的表示形式(因为 64 位 Windows 使用LLP64 数据模型),因此您可以:

  • 配置包含 的定义的项目jint以使用int而不是long int, 或
  • 添加重载将long int其转发到int重载,或
  • jint参数转换到int它调用模棱两可的函数的任何地方
于 2012-10-12T13:14:30.447 回答
2

您必须给出方法中最后一个参数的正确类型。

假设您致电:

PCACompute(cv::Mat&, cv::Mat&, cv::Mat&, jint&) 最后一个参数为 5

并且编译器不知道如何选择:

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 回答