2012-05-31 2 views
7

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

Вы передавали код через moc перед g ++? –

+3

Секции «Слоты» и «Сигналы» должны содержать только функции; ни типы, ни переменные-члены. – leemes

ответ

6

Разделы «слотов» и «сигналов» в определении класса должны содержать только функции; ни типы, ни переменные-члены.

Вы должны переместить 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: 
... 
Смежные вопросы