gpt4 book ai didi

c++ - 重载调用不明确

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:55:02 26 4
gpt4 key购买 nike

我有以下编译器错误:“重载‘reduceColors(ipl_image_wrapper&, ipl_image_wrapper&, int)’的调用不明确”

我有一个 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(...) 函数和其他函数有什么区别?它们具有相似的参数列表。编译器在哪里发现歧义?

编辑:

函数的声明顺序非常重要。

源代码没有错误(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
}

最佳答案

实际上两个不同的reduceColors函数:一个是声明的,它的第二个参数是ipl_image_wrapper&,另一个是定义的,它的第二个参数是 ipl_image_wrapper。使它们相同。

关于c++ - 重载调用不明确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15811745/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com