2013-11-14 2 views
3

QObject 클래스가 Message이고 다른 하나가 Request이며 메시지 클래스를 상속합니다. 다음은 헤더 파일입니다.Qt에서 enum을 사용하는 방법?

#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 

이제 코드에서 Request를 만들고 SetData에 Type을 설정하려고합니다. 어떻게해야합니까? 다음은 " 'Request :: RequestTypes'가 클래스 또는 네임 스페이스가 아닌 오류를 제공하는 현재 코드입니다. 즉

Request *r = new Request(); 
r->Source = "My Source"; 
r->Destination = "My Destination"; 
r->Type = Request::RequestTypes::SetData; 

: 나뿐만 아니라 수 있지만 Type - 위의 헤더 파일이 너무 Request이 알려져 있고, 만들 수 있습니다와 나는 다른 속성을 설정할 수 있습니다, 내 주요 프로그램 헤더 파일에 포함되어 있습니다 RequestType 속성에 대한 QString을 가져 왔지만 열거 형으로이 작업을 수행하는 것이 안전하고 안전합니다. 누군가 나에게 무엇이 잘못되었는지 보여 주실 수 있습니까? 당신이했던 것처럼 그것을 사용하기 위해

enum class RequestTypes 
    { 
    SetData, 
    GetData 
    }; 

,하지만 C++ 11이 필요합니다

+0

잘 작동합니다 그. 오류를 일으키는 완전한 프로그램 (예 : [SSCCe] (http://sscce.org/))뿐만 아니라 완전하고 편집되지 않은 오류 메시지를 포함시킬 수 있습니까? –

+0

거기에 아무것도 더, 여기에 전체 오류 메시지 (내 질문에서 코드를 사용하는 경우) : mainwindow.cpp : 235 : 24 : 오류 : 'Request :: RequestTypes'클래스 또는 네임 스페이스가 없습니다 make : *** [mainwindow .o] Error 1 – Robert

+0

이상하게 들리지만 Request :: RequestTypes :: SetData는 잘 동작 할 것입니다. 어쩌면 Qt 사전 처리와 관련이 있는데, 그렇지 않으면이 C++ 사용법을 방해 할 수 있습니다. –

답변

7

은 당신과 같이 열거를 선언해야합니다.

정상적인 사용은 (귀하의 경우) 다음과 같습니다 r->Type = RequestTypes::SetData;

+0

그게 다야, 고마워! – Robert

관련 문제