g++ 在":"解析错误

g++ Parse error at ":"

本文关键字:错误 g++      更新时间:2023-10-16

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多年了,以前从未见过这个,这一定是愚蠢的,但我看不出是什么导致了问题。

类定义中的"插槽"和"信号"部分应该只包含函数;既不能包含类型,也不能包含成员变量。

您应该在公共、受保护或私有部分中移动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:
...