неоднозначность — C ++: неоднозначная функция

Я почти не знаю 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>&'

Если вам нужна дополнительная информация / код, пожалуйста, скажите, и я обновлю вопрос с ним.

0

Решение

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 везде это вызывает неоднозначную функцию
4

Другие решения

Вы должны указать правильный тип последнего параметра в методе.

Допустим, вы звоните:

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), и тогда компилятор сделает правильный выбор.

2

Ошибки сборки показывают проблему.

Звонок в 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)
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector