2012-05-31 36 views
7

g++被報告與下面的代碼解析錯誤:G ++的語法錯誤「:」

class Sy_timeLineDelegateScene : public QGraphicsScene 
{ 
    Q_OBJECT 
public: 
    Sy_timeLineDelegateScene(Sy_animPropertyTimeLine* timeline, 
           Sy_animClock* clock, 
           QObject* parent = nullptr); 
    virtual ~Sy_timeLineDelegateScene() {} 

protected slots: // Parse error at ":" 
    typedef QMap< Sy::Frame, Sy_timeLineDelegateKey* > DelegateTimeLine; 
... 

我的類從QObject衍生和我已經宣佈了錯誤之前的Q_OBJECT宏,但如果我註釋掉slots部分,它編譯得很好。我多年來一直使用Qt,以前從未見過這種情況,但它一定是愚蠢的,但我看不出造成問題的原因。

+1

是不是隻是'保護:'沒有'slots'? –

+3

你在g ++之前通過moc傳遞了代碼嗎? –

+3

「插槽」和「信號」部分應該只包含功能;無論是類型還是成員變量。 – leemes

回答

6

類定義中的「slots」和「signals」部分應該只包含函數;無論是類型還是成員變量。

你應該將在一個公共的typedef,受保護的或私有部分:

class Sy_timeLineDelegateScene : public QGraphicsScene 
{ 
    Q_OBJECT 
public: 
    Sy_timeLineDelegateScene(Sy_animPropertyTimeLine* timeline, 
           Sy_animClock* clock, 
           QObject* parent = nullptr); 
    virtual ~Sy_timeLineDelegateScene() {} 

    typedef QMap< Sy::Frame, Sy_timeLineDelegateKey* > DelegateTimeLine; 

protected slots: 
...