我是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
非常感谢任何帮助。
答案 0 :(得分:5)
您定义的函数是ImageConvert
类的成员函数。您需要该类的实例才能调用它们。
类似的东西:
ImageConvert ic;
ic.QImage2IplImage(your_QImage_object);
如果您不需要状态来进行转换,则应该创建辅助函数static
。然后你可以用:
ImageConvert::QImage2IplImage(your_QImage_object);
没有先创建ImageConvert
的实例。但请注意,您将无法在这些静态函数中使用imgHeader
或newData
- 它们是成员变量,只能在该类的实例中使用。
您也可以从班级中删除这些功能并将其放入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);