Звонок перегружен неоднозначно

У меня есть следующее ошибка компилятора : "call of overloaded ‘reduceColors(ipl_image_wrapper&, ipl_image_wrapper&, int)’ is ambiguous"

У меня есть класс-оболочка для IplImage (DrawingDetection.h):

#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/objdetect/objdetect.hpp>
#include <opencv2/features2d/features2d.hpp>
#include <boost/shared_ptr.hpp>

#include "Utils.h"
class ipl_image_wrapper
{
public:
typedef boost::shared_ptr< IplImage > ipl_image_ptr_t;

ipl_image_wrapper() {}
ipl_image_wrapper( IplImage* img ) : _img( img, ipl_deleter ) {}

IplImage*       get()       { return _img.get(); }
const IplImage* get() const { return _img.get(); }

private:

static void ipl_deleter( IplImage* ipl_img )
{
//some code
}

ipl_image_ptr_t _img;
};

И у меня есть следующие функции (Utils.h):

#include "DrawingDetection.h"
int calculateHomogeneity(const ipl_image_wrapper &img, Factor & factor);
void reduceColors(const ipl_image_wrapper &img, ipl_image_wrapper &out, int levels);
int calculateCComponentsSize(const ipl_image_wrapper &img, Factor &factor);

Других объявлений этой функции нет (!). Я не перегружаю их.

И исходный код с ошибка (Utils.cpp):

#include <boost/shared_ptr.hpp>
#include "Utils.h"

int calculateCComponentsSize(const ipl_image_wrapper img, Factor &factor)
{
// some calculations
}
void reduceColors(const ipl_image_wrapper &img, ipl_image_wrapper out, int levels)
{
// some calculations
}
int calculateHomogeneity(const ipl_image_wrapper &img, Factor & factor)
{
// some calculations
}
void getFactorsOfImage( const ipl_image_wrapper &image, Factor& factor )
{
ipl_image_wrapper gray = cvCreateImage( cvGetSize ( image.get() ), IPL_DEPTH_8U, 1);

// some calculations
calculateHomogeneity( gray, factor ); // ok
reduceColors( gray, gray, 20 ); // ambiguity !!
int n1 = calculateCComponentsSize( gray, factor );// ambiguity !!
reduceColors( gray, gray, 8 );// ambiguity !!
int n2 = calculateCComponentsSize( gray, factor );// ambiguity !!

// some calculations
}

Какова разница между функцией расчета однородности (…) и остальными? У них аналогичный список параметров. Где компилятор обнаружил неоднозначность?

РЕДАКТИРОВАТЬ:

Порядок объявления функций был очень важен.

Исходный код без ошибка (Utils.cpp):

#include <boost/shared_ptr.hpp>
#include "Utils.h"
void getFactorsOfImage( const ipl_image_wrapper &image, Factor& factor )
{
ipl_image_wrapper gray = cvCreateImage( cvGetSize ( image.get() ), IPL_DEPTH_8U, 1);

// some calculations
calculateHomogeneity( gray, factor ); // ok
reduceColors( gray, gray, 20 ); // ambiguity !!
int n1 = calculateCComponentsSize( gray, factor );// ambiguity !!
reduceColors( gray, gray, 8 );// ambiguity !!
int n2 = calculateCComponentsSize( gray, factor );// ambiguity !!

// some calculations
}
// After getFactorsOfImage function
int calculateCComponentsSize(const ipl_image_wrapper img, Factor &factor)
{
// some calculations
}
void reduceColors(const ipl_image_wrapper &img, ipl_image_wrapper out, int levels)
{
// some calculations
}
int calculateHomogeneity(const ipl_image_wrapper &img, Factor & factor)
{
// some calculations
}

3

Решение

Там на самом деле являются два разных reduceColors функции: тот, который объявлен, чей второй аргумент ipl_image_wrapper&и тот, который определен, чей второй аргумент ipl_image_wrapper, Сделай их одинаковыми.

4

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

Других решений пока нет …