je l'erreur du compilateur suivant: "call of overloaded ‘reduceColors(ipl_image_wrapper&, ipl_image_wrapper&, int)’ is ambiguous"
Call of surcharge est ambigu
J'ai une classe wrapper pour 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;
};
Et j'ai les fonctions suivantes (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);
Il n'y a pas d'autres déclarations de ces fonctions (!). Je ne les surcharge pas.
et le code source avec erreur (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
}
Quelle est la diiference entre la fonction calculateHomogeneity (...) et le reste? Ils ont une liste similaire de paramètres. Où le compilateur a trouvé l'ambiguïté?
EDIT:
ordre de la fonction de la Déclaration a été très important.
code source sans erreur (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
}
Vous avez d'autres déclarations de ces fonctions qui prennent d'autres arguments. S'il vous plaît modifier votre question contiennent les messages d'erreur _complete_ et _unedited_, il y a probablement un indice là. –
s'il vous plaît fournir un [SSCCE] (http://sscce.org) –
en dehors des déclarations, vous avez * définitions * des fonctions. Si elles sont visibles sur le site d'appel et ont des signatures différentes, ce serait une raison possible pour l'ambiguïté. –