2013-04-04 1 views
3

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 
} 
+5

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à. –

+1

s'il vous plaît fournir un [SSCCE] (http://sscce.org) –

+3

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é. –

Répondre

3

Il en fait sont deux reduceColors différentes fonctions: celle qui est déclarée, dont le second argument est ipl_image_wrapper&, et celui qui est défini, dont le second argument est ipl_image_wrapper. Faites-les pareil.

+0

C'est ce que j'ai dit dans les commentaires - semble qu'elle n'a pas lu :( –

+0

@ArneMertz - Je ne voudrais pas spéculer sur qui a fait ou n'a pas fait quoi. Ce n'est pas pertinent pour le problème. –

Questions connexes