zoukankan      html  css  js  c++  java
  • Syntax error missing ; before *

     

    【问题】

    I have a header file like so:

    #pragma once

    #include "gamestate.h"

    #include "ExitListener.h"

     

    class InitialGameState : public GameState

    {

    public:

    InitialGameState(Ogre::Camera *cam, Ogre::SceneManager *sceneMgr, OIS::Keyboard *keyboard, OIS::Mouse *mouse, Ogre::Root *root);

    ~InitialGameState(void);

    virtual bool update(Ogre::Real time);

    virtual void pause(void);

    virtual void start(void);

    void keyPressed(const OIS::KeyEvent &e);

    void keyReleased(const OIS::KeyEvent &e);

    //private:

    ExitListener *mFrameListener;

    };

    The problem with this is that I get the following errors from VC 8:

    InitialGameState.h(16) : error C2143: syntax error : missing ';' before '*'

    InitialGameState.h(16) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

    InitialGameState.h(16) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

    (they all refer to the last line)

    I have a class ExitListener.h which is why I don't get the errors

    Edit: ExitListener.h:

    #pragma once

    #include <Ogre.h>

    #include <OIS/OIS.h>

    #include <CEGUI/CEGUI.h>

    #include <OgreCEGUIRenderer.h>

    #include "Thing.h"

    #include "InitialGameState.h"

     

    using namespace Ogre;

    class ExitListener : public FrameListener, public OIS::KeyListener, public OIS::MouseListener

    {

    public:

    ExitListener(OIS::Keyboard *keyboard, OIS::Mouse *mouse, Camera *cam, std::vector<Thing*> &vec):

    mKeyboard(keyboard), r(0.09), mContinue(true), mRunningAnimation(false),

    mMouse(mouse), mYaw(0), mPitch(0), things(vec), mCamera(cam), mWDown(false), mSDown(false), mADown(false),

    mDDown(false)

    {

    things = vec;

    mKeyboard->setEventCallback(this);

    mMouse->setEventCallback(this);

    }

    bool frameStarted(const FrameEvent& evt);

    bool keyPressed(const OIS::KeyEvent &e);

    bool keyReleased(const OIS::KeyEvent &e);

    bool mouseMoved(const OIS::MouseEvent &e);

    bool mousePressed(const OIS::MouseEvent &e, OIS::MouseButtonID id);

    bool mouseReleased(const OIS::MouseEvent &e, OIS::MouseButtonID id);

     

    void setOwner(GameState *g);

     

    private:

    AnimationState *mSwim;

    Radian r;

    Radian mYaw;

    Radian mPitch;

    OIS::Keyboard *mKeyboard;

    OIS::Mouse *mMouse;

    Camera *mCamera;

    bool mContinue;

    bool mRunningAnimation;

    std::vector<Thing*> &things;

    bool mWDown;

    bool mADown;

    bool mDDown;

    bool mSDown;

    GameState *mOwner;

    };

    Edit 2:

    It turned out that the problem could be solved by a forward declaration and then including the other header directly in my .cpp file.

    Thanks.

     

    【答案】

    My guess is that ExitListener.h is including InitialGameState.h header file either directly or indirectly. So there is a circular dependency between the header file and compiler is unable to find the declaration for ExitListener. If you just need to store the pointer of ExitListener in this class then there is no need to include the ExitListener.h header file. Instead you can just use the forward declaration as class ExitListener;

    EDIT: You can use the forward declaration as suggested above, or remove the InitialGameState.h include from ExitListener.h . You need to include GameState.h (the base class header file) only. But I prefer to use the forward declarations in header file and include the header file only in cpp.

     

    From: https://stackoverflow.com/questions/1542623/syntax-error-missing-before

  • 相关阅读:
    蓝桥杯 算法训练 ALGO-57 删除多余括号
    蓝桥杯 算法训练 ALGO-50 数组查找及替换
    蓝桥杯 算法训练 ALGO-60 矩阵乘法
    求最大公约数和最小公倍数的几种方法
    南阳OJ 1170 最大的数
    蓝桥杯 基础练习 BASIC-30 阶乘计算
    蓝桥杯 算法训练 ALGO-108 最大的体积
    蓝桥杯 算法训练 ALGO-114 黑白无常
    蓝桥杯 算法训练 ALGO-93 反置数
    蓝桥杯 算法训练 ALGO-21 装箱问题
  • 原文地址:https://www.cnblogs.com/time-is-life/p/8325115.html
Copyright © 2011-2022 走看看