Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未在此范围中声明 我是C++新手,用QT做项目。我创建了一个名为imageconvert.h的头文件,如下所示: class ImageConvert { private: IplImage *imgHeader; uchar* newdata; public: ImageConvert(); ~ImageConvert(); IplImage* QImage2IplImage(QImage *qimg); QImage* IplImage2QImage(IplImage *iplImg); };_C++_Qt - Fatal编程技术网

未在此范围中声明 我是C++新手,用QT做项目。我创建了一个名为imageconvert.h的头文件,如下所示: class ImageConvert { private: IplImage *imgHeader; uchar* newdata; public: ImageConvert(); ~ImageConvert(); IplImage* QImage2IplImage(QImage *qimg); QImage* IplImage2QImage(IplImage *iplImg); };

未在此范围中声明 我是C++新手,用QT做项目。我创建了一个名为imageconvert.h的头文件,如下所示: class ImageConvert { private: IplImage *imgHeader; uchar* newdata; public: ImageConvert(); ~ImageConvert(); IplImage* QImage2IplImage(QImage *qimg); QImage* IplImage2QImage(IplImage *iplImg); };,c++,qt,C++,Qt,我还在imageconvert.cpp文件中定义了这些公共方法 现在,我想从其他cpp文件调用qimage2ipImage和IplImage2QImage。所以我在CPP文件中包含imageconvert.h并调用了这两个函数 它给出了以下错误: error: 'QImage2IplImage' was not declared in this scope error: 'IplImage2QImage' was not declared in this scope 非常感谢您的帮助。您定义的

我还在imageconvert.cpp文件中定义了这些公共方法

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

它给出了以下错误:

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

非常感谢您的帮助。

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

比如:

ImageConvert ic;
ic.QImage2IplImage(your_QImage_object);
如果不需要状态来进行转换,则应将这些帮助器函数设置为静态。然后您可以通过以下方式给他们打电话:

ImageConvert::QImage2IplImage(your_QImage_object);
无需首先创建ImageConvert的实例。但请注意,您将无法在这些静态函数中使用imgHeader或newData-它们是成员变量,只能在该类的实例中使用

您还可以从类中删除这些函数,并将它们放在

你的问题。。。 你如何准确地调用这些函数?鉴于您的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,这是一件好事。此外,还可以在命名空间中对函数进行分组:

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

你怎么称呼他们?您是如何从ImageConvert类创建对象的?谢谢您的回复。我用:IplImage*img;图像*img_温度;img=QImage2IplImageimage;img_temp=IplImage2QImageimg;它们是ImageConvert类的成员函数。必须声明该类型的对象才能调用它们。否则,就让它们成为免费函数。嗨,Jonsca,谢谢你的回复。请您用示例代码解释一下,我是CPP的新手。这对梅西·马特的回答很有帮助。我的意思并不是苛刻,但在深入研究像Qt这样的综合库之前,您可能想先阅读一些基础知识。我想这最终会为你节省很多时间。为什么要让它们静止?为什么不改用名称空间呢?