C ++:模糊函数

时间:2012-10-12 13:03:22

标签: c++ ambiguity

我几乎不了解C ++,但我需要帮助来解决项目构建问题。当我制作项目时,它给了我一些错误,说明某些功能是不明确的。我清楚地明白这是什么意思"It means that there are other versions of the function that take different arguments or different numbers of arguments"。但由于我在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>&'

如果您需要更多信息/代码,请告诉我,我会用它来更新问题。

3 个答案:

答案 0 :(得分:4)

jintlong int的typedef(请参见下面的'jint {aka long int}')。 long int是与int不同的类型(即使它们具有相同的表示形式),因此编译器无法在该参数中的intdouble之间做出重载。

当您似乎在Windows上时,intlong int具有相同的表示形式(因为64位Windows使用LLP64 data model),因此您可以:

  • 将包含jint定义的项目配置为使用int而不是long int,或
  • 添加超出long int转发到int重载或
  • 的重载
  • jint参数转换为int所谓的模糊函数

答案 1 :(得分:2)

您必须在方法中指定最后一个参数的正确类型。

让我们说你打电话:

PCACompute(cv :: Mat&amp;,cv :: Mat&amp;,cv :: Mat&amp;,jint&amp;),最后一个参数为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),然后编译器将做出正确的选择。

答案 2 :(得分:0)

构建错误显示问题。

不支持对PCACompute(cv :: Mat&amp;,cv :: Mat&amp;,cv :: Mat&amp;,jint&amp;)的调用,因为具有相同功能名称(和可能的参数类型)的唯一可能的函数是下面列出的功能。它只是意味着您使用错误的参数类型调用具有相同名称的函数。

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