我几乎不了解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>&'
如果您需要更多信息/代码,请告诉我,我会用它来更新问题。
答案 0 :(得分:4)
jint
是long int
的typedef(请参见下面的'jint {aka long int}'
)。 long int
是与int
不同的类型(即使它们具有相同的表示形式),因此编译器无法在该参数中的int
和double
之间做出重载。
当您似乎在Windows上时,int
和long 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)