У меня есть класс QObject Message
и еще один по имени Request
, который наследует класс сообщения. Вот заголовок файла:Как использовать перечисление в Qt?
#ifndef MESSAGE_H
#define MESSAGE_H
#include <QObject>
class Message : public QObject
{
Q_OBJECT
public:
explicit Message(QObject *parent = 0);
QString Source;
QString Destination;
QString Transaction;
QList<QObject> Content;
signals:
public slots:
};
class Request : public Message
{
Q_OBJECT
Q_ENUMS(RequestTypes)
public:
explicit Request();
enum RequestTypes
{
SetData,
GetData
};
RequestTypes Type;
QString Id;
};
#endif // MESSAGE_H
Теперь я хочу, чтобы создать запрос в мой код и установите в качестве типа SetData. Как я могу это сделать? Вот мой текущий код, который дает ошибку «Request :: RequestTypes» не является классом или пространством имен ». Файл заголовка сверху входит в мой файл заголовка основных программ, так Request
известно и может быть создан, и я могу установить другие свойства - но не Type
:
Request *r = new Request();
r->Source = "My Source";
r->Destination = "My Destination";
r->Type = Request::RequestTypes::SetData;
Другими словами: я мог бы, как хорошо взял QString для свойства Type
Request
, но было бы неплохо и безопаснее сделать это с перечислением. Может кто-нибудь, пожалуйста, покажите мне, что здесь не так?
Это должно работать нормально. Можете ли вы включить полное и неотредактированное сообщение об ошибке, а также полную программу (.e. A [SSCCe] (http://sscce.org/)), которая вызывает ошибку? –
Нет ничего больше, вот полное сообщение об ошибке (при использовании кода из моего вопроса): mainwindow.cpp: 235: 24: error: 'Request :: RequestTypes' не является классом или пространством имен make: *** [mainwindow .o] Ошибка 1 – Robert
Это странно, 'Request :: RequestTypes :: SetData' должен работать нормально. Возможно, это как-то связано с предварительной обработкой Qt, которая нарушает это в противном случае хорошее использование C++. –