C++ g++;错误:应为(‘;)’;在‘之前*’;代币

C++ g++;错误:应为(‘;)’;在‘之前*’;代币,c++,linux,qt,qt4,C++,Linux,Qt,Qt4,我有这段代码。我尝试的是将qgraphicscene子类化,以重新实现其keyPressEvent()方法。顺便说一句,我不得不为这件事选择这个特殊的实现(尤其是typedef部分),以解决与代码其他部分兼容的问题 keypress.h #include <QWidget> #include <QGraphicsScene> #include <QGraphicsView> class Canvas; typedef struct{ int id;

我有这段代码。我尝试的是将
qgraphicscene
子类化,以重新实现其
keyPressEvent()
方法。顺便说一句,我不得不为这件事选择这个特殊的实现(尤其是
typedef
部分),以解决与代码其他部分兼容的问题

keypress.h

#include <QWidget>
#include <QGraphicsScene>
#include <QGraphicsView>

class Canvas;

typedef struct{
    int id;
    int pid;
    Canvas *qgc;

}scene;

class Canvas: public QGraphicsScene {

    private:
        scene *gc;

    public:
        Canvas(Scene* gc, QWidget *parent=0);

    protected:
        void keyPressEvent(QKeyEvent *e);
};

我的代码有什么问题?

您的typedef显示的是
scene
,但您在几个地方使用了
scene
。这是有意的吗?注意C++中的标识符是敏感的,根据您的错误信息,KEPress .H至少包含29行。您发布的keypress.h仅包含24行,s未初始化。然后,将场景和场景混合。纠正这一点,如前所述,给我们完整的按键。
#include <QApplication>
#include <QKeyEvent>

#include "keypress.h"

Canvas::Canvas( Scene* gc, QWidget *parent)
    : QGraphicsScene(parent)
{
    this->gc=gc;
}

void Canvas::keyPressEvent(QKeyEvent *event)
{
   if (event->key() == Qt::Key_Escape) {  
   qApp->quit();
   } 
}
#include <QApplication>
#include "keypress.h"
#include <QGraphicsView>

int main(int argc, char *argv[])
{
  QApplication app(argc, argv);  

  Scene *s;
  Canvas *canvas=new Canvas(s);
  canvas->addText("Hello");

  QGraphicsView view(canvas);
  view.show();
  return app.exec();
}
In file included from keypress.cpp:4:
keypress.h:29: error: expected ‘)’ before ‘*’ token
keypress.cpp:6: error: expected ‘)’ before ‘*’ token
make: *** [keypress.o] Error 1