2013-04-04 65 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