не был объявлен в этой области - PullRequest
0 голосов
/ 27 июля 2011

Я новичок в C ++ и работаю над проектом с QT.Я создал заголовочный файл с именем imageconvert.h, который выглядит следующим образом:

class ImageConvert
{

private:
IplImage *imgHeader;
uchar* newdata;

public:

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

, также я определил эти открытые методы в файле imageconvert.cpp

Теперь я хочу вызвать QImage2IplImage и IplImage2QImage из другого файла cpp.Поэтому я включил imageconvert.h в этот файл CPP и вызвал эти две функции.

выдает следующие ошибки:

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

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

5 голосов
/ 27 июля 2011

Определенные вами функции являются функциями-членами класса ImageConvert.Вам нужен экземпляр этого класса, чтобы иметь возможность вызывать их.

Что-то вроде:

ImageConvert ic;
ic.QImage2IplImage(your_QImage_object);

Если вам не нужно состояние для выполнения преобразования, вы должны сделать эти вспомогательные функцииstatic.Затем вы можете вызвать их с помощью:

ImageConvert::QImage2IplImage(your_QImage_object);

без предварительного создания экземпляра ImageConvert.Но учтите, что вы не сможете использовать imgHeader или newData в этих статических функциях - они являются переменными-членами и могут использоваться только в экземпляре этого класса.

Вы также можете удалить эти функции изваш класс и положить их в namespace.

3 голосов
/ 27 июля 2011

Ваш вопрос ...

Как именно вы вызываете эти функции?Учитывая ваш класс 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...