未在此范围内声明
was not declared in this scope
我是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
您定义的函数是ImageConvert
类的成员函数。您需要该类的一个实例才能调用它们。
类似:
ImageConvert ic;
ic.QImage2IplImage(your_QImage_object);
如果你不需要状态来做转换,你应该让那些辅助函数static
。然后你可以用:
ImageConvert::QImage2IplImage(your_QImage_object);
而不首先创建ImageConvert
的实例。但是请注意,您将无法在这些静态函数中使用imgHeader
或newData
-它们是成员变量,仅在该类的实例中可用。
您还可以从类中删除这些函数并将它们放在namespace
中。
你的问题…
如何调用这些函数?给定你的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正确是件好事。此外,您可以将函数分组到一个名称空间中:
// 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);
相关文章:
- 错误:未在此范围内声明'reverse'
- 错误:"imread"未在此范围内声明
- 我在范围内未声明的错误类有问题
- 未在此范围内声明错误 'xy'
- Socklen_t未在此范围内声明
- 错误:'[' 之前预期的非限定 id 和错误:'users'未在此范围内声明
- "Main"已在当前范围内声明
- c++ 变量在宏的扩展中没有在这个范围内声明
- C++ 在编译过程中 strtok 函数 Eclipse 说没有在范围内声明?
- 'num1'未在此范围内声明
- 在此范围内未声明错误"Clreol"
- 如何找到在本地范围内声明的变量的地址?
- 简化在 Pybind11 中为 C++ 模板类生成包装类:模板声明不能出现在块范围内
- NT状态未在此范围内声明
- 变量未在此范围内声明 数组线性搜索
- 包含文件中的 Typdef "未在此范围内声明"
- 'ClassName'和'ClassInstance'未在此范围内声明
- "ChaCha"尚未在此范围内使用Crypto++声明?
- C++ 中的类之间的数据重新循环 - 错误:'<class name>'未在此范围内声明
- 如何在类声明范围内使用“using space::function”