随笔 - 547  文章 - 213 评论 - 417 阅读 - 107万

 

【问题】

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

posted on   今夜太冷  阅读(911)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
历史上的今天:
2008-01-21 CSS优先级特性
2008-01-21 Div自动高度
2008-01-21 字体大小的单位
2008-01-21 position:relative 与 position:absolute
2008-01-21 Line-wrap(word-wrap) in CSS
2008-01-21 css的border-collapse
2008-01-21 css中Margin和padding属性的区别
点击右上角即可分享
微信分享提示