2013-04-04 64 views
3

我有以下编译器错误"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 
} 

什么是calculateHomogeneity之间(...)函数其余diiference和?他们有一个类似的参数列表。编译器在哪里发现歧义?

编辑:功能

声明顺序一直是非常重要的。

源代码而不误差(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

你还有其他的声明需要其他参数。请编辑您的问题包含_complete_和_unedited_错误消息,这里可能有提示。 – 2013-04-04 12:53:21

+1

请提供除声明外的[SSCCE](http://sscce.org) – 2013-04-04 12:59:57

+3

,您有*函数的定义*。如果他们在呼叫现场可见并且签名不同,那么这可能是模棱两可的原因。 – 2013-04-04 13:04:26

回答

3

实际上两种不同reduceColors功能:这是声明的一个,它的第二个参数是ipl_image_wrapper&,和真实定义的一个,其第二个参数是ipl_image_wrapper。让他们一样。

+0

这就是我在评论中所说 - 似乎她没有阅读:( – 2013-04-04 13:30:09

+0

@ArneMertz-我不会推测谁做了或没有做什么,这与问题无关。 – 2013-04-04 13:32:44