我有以下編譯器錯誤:"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
}
你還有其他的聲明需要其他參數。請編輯您的問題包含_complete_和_unedited_錯誤消息,這裏可能有提示。 – 2013-04-04 12:53:21
請提供除聲明外的[SSCCE](http://sscce.org) – 2013-04-04 12:59:57
,您有*函數的定義*。如果他們在呼叫現場可見並且簽名不同,那麼這可能是模棱兩可的原因。 – 2013-04-04 13:04:26