Я почти не знаю 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>&'
Если вам нужна дополнительная информация / код, пожалуйста, скажите, и я обновлю вопрос с ним.
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
везде это вызывает неоднозначную функциюВы должны указать правильный тип последнего параметра в методе.
Допустим, вы звоните:
PCACompute (резюме :: 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), и тогда компилятор сделает правильный выбор.
Ошибки сборки показывают проблему.
Звонок в 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)