开发者

was not declared in this scope

I am new in C++ and working on a project with QT. I created a header file called imageconvert.h which is as follow:

class ImageConvert
{

private:
IplImage *imgHeader;
uchar* newdata;

public:

开发者_StackOverflow社区ImageConvert();
~ImageConvert();
IplImage* QImage2IplImage(QImage *qimg);
QImage* IplImage2QImage(IplImage *iplImg);
};

also I defined those public methods in imageconvert.cpp file.

Now, I want to call QImage2IplImage and IplImage2QImage from other cpp file. So i include imageconvert.h in that CPP file and called those two functions.

it gives the the following errors:

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

Any help would be greatly appreciated.


The functions you've defined are member functions of the ImageConvert class. You need an instance of that class to be able to call them.

Something like:

ImageConvert ic;
ic.QImage2IplImage(your_QImage_object);

If you don't need state to do the conversion, you should make those helper functions static. Then you can call them with:

ImageConvert::QImage2IplImage(your_QImage_object);

without first creating an instance of ImageConvert. But please note that you will not be able to use imgHeader or newData in those static functions - they are member variables, only usable within an instance of that class.

You could also remove these functions from your class and put them in a namespace.


Your question...

How exactly do you call those functions? Given your ImageConverter class, this is how you should be doing it:

// First create a new converter
ImageConverter conv;

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

... And some advice on using classes

Do you by any chance come from a Java or C# background? If so, you should know that in C++ you can also have free functions (that don't belong to any class). You should only use classes when you need to abstract a certain (real world) concept, and not simply as a way to group functions:

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

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

Notice I added const to the function parameters — it's a good thing to be const correct. Additionaly, you can group your functions in a namespace:

// 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);
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜