gpt4 book ai didi

c++ - 缺少语法错误;前 *

转载 作者:可可西里 更新时间:2023-11-01 18:41:18 29 4
gpt4 key购买 nike

我有一个像这样的头文件:

#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;
};

这个问题是我从 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

(都是指最后一行)

我有一个类 ExitListener.h 这就是我没有收到错误的原因

编辑: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;
};

编辑 2:

事实证明,可以通过前向声明然后将另一个 header 直接包含在我的 .cpp 文件中来解决该问题。

谢谢。

最佳答案

我的猜测是 ExitListener.h 直接或间接包含了 InitialGameState.h 头文件。所以头文件之间存在循环依赖,编译器无法找到 ExitListener 的声明。如果您只需要在此类中存储 ExitListener 的指针,则无需包含 ExitListener.h 头文件。相反,您可以将前向声明用作 class ExitListener;

编辑:您可以使用上面建议的前向声明,或从 ExitListener.h 中删除 InitialGameState.h 包含。您只需要包含 GameState.h(基类头文件)。但我更喜欢在头文件中使用前向声明,并且只在 cpp 中包含头文件。

关于c++ - 缺少语法错误;前 *,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1542623/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com