【问题标题】:g++ Parse error at ":"g ++在“:”处解析错误
【发布时间】:2012-05-31 21:14:23
【问题描述】:

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

【问题讨论】:

  • 不就是protected:没有slots吗?
  • 你在g++之前有没有通过moc传代码?
  • “slots”和“signals”部分应该只包含函数;既不是类型也不是成员变量。
  • @juergend,这是 QT 的事情。 “MOC”(元对象编译器)是一种处理这些东西的预处理器。
  • @leemes 就是这样!谢谢,我一定是在文档中错过了这一点……把它写在答案中,我会接受的。

标签: c++ qt g++ signals-slots


【解决方案1】:

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

您应该将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:
...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-07
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-12
    • 2012-06-11
    • 1970-01-01
    相关资源
    最近更新 更多