在这方面没有申明

时间:2011-07-27 05:32:47

标签: c++ qt

我是C ++新手,正在使用QT开展项目。我创建了一个名为imageconvert.h的头文件,如下所示:

class ImageConvert
{

private:
IplImage *imgHeader;
uchar* newdata;

public:

ImageConvert();
~ImageConvert();
IplImage* QImage2IplImage(QImage *qimg);
QImage* IplImage2QImage(IplImage *iplImg);
};

我也在imageconvert.cpp文件中定义了那些公共方法。

现在,我想从其他cpp文件调用QImage2IplImage和IplImage2QImage。所以我在该CPP文件中包含了imageconvert.h并调用了这两个函数。

它会出现以下错误:

error: 'QImage2IplImage' was not declared in this scope
error: 'IplImage2QImage' was not declared in this scope

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:5)

您定义的函数是ImageConvert类的成员函数。您需要该类的实例才能调用它们。

类似的东西:

ImageConvert ic;
ic.QImage2IplImage(your_QImage_object);

如果您不需要状态来进行转换,则应该创建辅助函数static。然后你可以用:

打电话给他们
ImageConvert::QImage2IplImage(your_QImage_object);

没有先创建ImageConvert的实例。但请注意,您将无法在这些静态函数中使用imgHeadernewData - 它们是成员变量,只能在该类的实例中使用。

您也可以从班级中删除这些功能并将其放入namespace

答案 1 :(得分:3)

你的问题......

你究竟如何称呼这些功能?鉴于你的ImageConverter类,你应该这样做:

// First create a new converter
ImageConverter conv;

IplImage* ipl = conv.QImage2IplImage(qimg);
qimg = conv.IplImage2QImage(ipl);

......以及关于使用类

的一些建议

您是否有机会来自Java或C#背景?如果是这样,您应该知道在C ++中您还可以拥有自由函数(不属于任何类)。您只应在需要抽象某个(现实世界)概念时使用类,而不仅仅是将函数分组:

// image_converter.h
IplImage* QImage2IplImage(const QImage* qimg);
QImage* IplImage2QImage(const IplImage* iplImg);

// someother.cpp
IplImage* ipl = QImage2IplImage(qimg);
qimg = IplImage2QImage(ipl);

注意我在函数参数中添加了const - const correct是一件好事。另外,您可以在命名空间中对函数进行分组:

// image_converter.h
namespace converter
{
    IplImage* QImage2IplImage(const QImage* qimg);
    QImage* IplImage2QImage(const IplImage* iplImg);
}

// someother.cpp
IplImage* ipl = converter::QImage2IplImage(qimg);
qimg = converter::IplImage2QImage(ipl);