老是出现如下错误如何解决,求高手指教

时间:2021-08-04 19:43:12
e:\zhang\实验教学\funcode\taikongdazhan\sourcecode\header\lessonx.h(19) : error C2143: syntax error : missing ';' before '*'
e:\zhang\实验教学\funcode\taikongdazhan\sourcecode\header\lessonx.h(19) : error C2501: 'CMyFighter' : missing storage-class or type specifiers
e:\zhang\实验教学\funcode\taikongdazhan\sourcecode\header\lessonx.h(19) : error C2501: 'm_pMyFighter' : missing storage-class or type specifiers

14 个解决方案

#1


 missing ';' before '*' 
具体贴代码

#2


//===========================================================
//
//自定义的游戏精灵类
//
//===========================================================

#ifndef __CGAMESPRITE_H__
#define __CGAMESPRITE_H__

#include <Windows.h>
#include "CommonClass.h"
#include "LessonX.h"

//定义类体
class CMyFighter : public CSprite
{
public:
//声明构造函数
CMyFighter(const char *szName);
//声明析构函数
~CMyFighter() {};

void OnMove(const bool m_bKeyDown, const int iKey);

private:
float m_fVelocityLeft; //控制飞机的四个反向的速度
float m_fVelocityRight;
float m_fVelocityTop;
float m_fVelocityBottom;
};

#endif // __CGAMESPRITE_H__

上面是我自己写的一个类,放在了CMyFighter.h的头文件中

#ifndef _LESSON_X_H_
#define _LESSON_X_H_
//
#include <Windows.h>
#include "CMyFighter.h"
/////////////////////////////////////////////////////////////////////////////////
//
// 游戏总管类。负责处理游戏主循环、游戏初始化、结束等工作
class CGameMain
{
private:
CMyFighter *m_pMyFighter;
          int m_iGameState;

//世界边界变量
float m_fWorldLeft;
float m_fWorldRight;
float m_fWorldTop;
float m_fWorldBottom;

public:
CGameMain();            //构造函数
~CGameMain();           //析构函数  

// Get方法
int GetGameState() { return m_iGameState; }

// Set方法
void SetGameState( const int iState ) { m_iGameState = iState; }

// 游戏主循环等
void GameMainLoop( float fDeltaTime );
void GameInit();
void GameRun( float fDeltaTime );
void GameEnd();

//get
float GetWorldLeft() {return m_fWorldLeft;}
float GetWorldRight() {return m_fWorldRight;}
float GetWorldTop() {return m_fWorldTop;}
float GetWorldBottom() {return m_fWorldBottom;}
};

/////////////////////////////////////////////////////////////////////////////////
// 
extern CGameMain g_GameMain;

#endif // _LESSON_X_H_
在这个头文件中调用的时候就出现了以上的错误,希望您能给出解释,先谢过了!

#3


提问的智慧。

你感觉是什么问题

#4


恩 把#include ”CMyFighter“ 改成class CMyFighter;我看网上有这么写的,我也改了,不知道为什么前面的不可以,后面的可以,请您指教

#5


偶遇到类似问题都是用
“每次用/*...*/注释掉不同部分再重新编译,直到定位到具体语法出错的位置。”
的方法解决的。

#6


谢谢您的回复,这样可以找到错误的位置,但是我想知道一般声明愿意可以导致这样的错误。您看根据您的经验,可以给点意见吗?

#7


偶遇到类似问题都是用
“每次用/*...*/注释掉不同部分再重新编译,直到定位到具体语法出错的位置。”
的方法解决的。

#8


老是出现如下错误如何解决,求高手指教

#9


老是出现如下错误如何解决,求高手指教

#10


看这段代码 没发现什么错误

#11


估计你的头文件里有类的循环的交叉引用,互相包含的话形成递归引用,编译器没有办法编译这种代码。
一个类内部包含另一个类的指针或者数据,这个类有或明或暗的引用类那个类。形成一个走不出去的怪圈。
A类的头文件包含B类的头文件,则B类没有定义,B类的头文件包含A类的头文件,则A类没有定义。
这种情况,使用 class A;这种前向应用,并且不是两个类都使用另一个类的对象,而是至少有一个类使用另一个那个类的指针;就可以编译过去了,因为指针的大小是固定的。
和类型本身无关,不需要知道类型的全部信息就可以使用指针。


#12


引用 7 楼 zhao4zhong1 的回复:
偶遇到类似问题都是用
“每次用/*...*/注释掉不同部分再重新编译,直到定位到具体语法出错的位置。”
的方法解决的。

第一步:在代码最开头加/*,最末尾加*/,保存,编译(注意是只编译不链接),如果还是出现编译错误,重装编译器或换个编译器,否则进入下一步。
第二步:去掉上一步添加的/*和*/,在怀疑有错误的代码片断的前后分别添加/*和*/,保存,编译(注意是只编译不链接),如果还是出现编译错误,则此次怀疑被排除,另选其它怀疑有错误的代码片断;否则缩小被/*和*/括住的代码片断,重复本步骤直到定位到具体语法出错的位置。

#13


系统或开源库的.h出错的概率远小于自己源代码出错的概率!!

#14


不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!

#1


 missing ';' before '*' 
具体贴代码

#2


//===========================================================
//
//自定义的游戏精灵类
//
//===========================================================

#ifndef __CGAMESPRITE_H__
#define __CGAMESPRITE_H__

#include <Windows.h>
#include "CommonClass.h"
#include "LessonX.h"

//定义类体
class CMyFighter : public CSprite
{
public:
//声明构造函数
CMyFighter(const char *szName);
//声明析构函数
~CMyFighter() {};

void OnMove(const bool m_bKeyDown, const int iKey);

private:
float m_fVelocityLeft; //控制飞机的四个反向的速度
float m_fVelocityRight;
float m_fVelocityTop;
float m_fVelocityBottom;
};

#endif // __CGAMESPRITE_H__

上面是我自己写的一个类,放在了CMyFighter.h的头文件中

#ifndef _LESSON_X_H_
#define _LESSON_X_H_
//
#include <Windows.h>
#include "CMyFighter.h"
/////////////////////////////////////////////////////////////////////////////////
//
// 游戏总管类。负责处理游戏主循环、游戏初始化、结束等工作
class CGameMain
{
private:
CMyFighter *m_pMyFighter;
          int m_iGameState;

//世界边界变量
float m_fWorldLeft;
float m_fWorldRight;
float m_fWorldTop;
float m_fWorldBottom;

public:
CGameMain();            //构造函数
~CGameMain();           //析构函数  

// Get方法
int GetGameState() { return m_iGameState; }

// Set方法
void SetGameState( const int iState ) { m_iGameState = iState; }

// 游戏主循环等
void GameMainLoop( float fDeltaTime );
void GameInit();
void GameRun( float fDeltaTime );
void GameEnd();

//get
float GetWorldLeft() {return m_fWorldLeft;}
float GetWorldRight() {return m_fWorldRight;}
float GetWorldTop() {return m_fWorldTop;}
float GetWorldBottom() {return m_fWorldBottom;}
};

/////////////////////////////////////////////////////////////////////////////////
// 
extern CGameMain g_GameMain;

#endif // _LESSON_X_H_
在这个头文件中调用的时候就出现了以上的错误,希望您能给出解释,先谢过了!

#3


提问的智慧。

你感觉是什么问题

#4


恩 把#include ”CMyFighter“ 改成class CMyFighter;我看网上有这么写的,我也改了,不知道为什么前面的不可以,后面的可以,请您指教

#5


偶遇到类似问题都是用
“每次用/*...*/注释掉不同部分再重新编译,直到定位到具体语法出错的位置。”
的方法解决的。

#6


谢谢您的回复,这样可以找到错误的位置,但是我想知道一般声明愿意可以导致这样的错误。您看根据您的经验,可以给点意见吗?

#7


偶遇到类似问题都是用
“每次用/*...*/注释掉不同部分再重新编译,直到定位到具体语法出错的位置。”
的方法解决的。

#8


老是出现如下错误如何解决,求高手指教

#9


老是出现如下错误如何解决,求高手指教

#10


看这段代码 没发现什么错误

#11


估计你的头文件里有类的循环的交叉引用,互相包含的话形成递归引用,编译器没有办法编译这种代码。
一个类内部包含另一个类的指针或者数据,这个类有或明或暗的引用类那个类。形成一个走不出去的怪圈。
A类的头文件包含B类的头文件,则B类没有定义,B类的头文件包含A类的头文件,则A类没有定义。
这种情况,使用 class A;这种前向应用,并且不是两个类都使用另一个类的对象,而是至少有一个类使用另一个那个类的指针;就可以编译过去了,因为指针的大小是固定的。
和类型本身无关,不需要知道类型的全部信息就可以使用指针。


#12


引用 7 楼 zhao4zhong1 的回复:
偶遇到类似问题都是用
“每次用/*...*/注释掉不同部分再重新编译,直到定位到具体语法出错的位置。”
的方法解决的。

第一步:在代码最开头加/*,最末尾加*/,保存,编译(注意是只编译不链接),如果还是出现编译错误,重装编译器或换个编译器,否则进入下一步。
第二步:去掉上一步添加的/*和*/,在怀疑有错误的代码片断的前后分别添加/*和*/,保存,编译(注意是只编译不链接),如果还是出现编译错误,则此次怀疑被排除,另选其它怀疑有错误的代码片断;否则缩小被/*和*/括住的代码片断,重复本步骤直到定位到具体语法出错的位置。

#13


系统或开源库的.h出错的概率远小于自己源代码出错的概率!!

#14


不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!