类中声明对象数组出现问题

panyuanzhi123 2013-03-25 07:30:36
编译器为vs2012
#pragma once
#include "MyPoint.h"


class Step
{
public:
CMyPoint pt[10];//出错行,显示有2个错误
//(1)error C2146: 语法错误: 缺少“;”(在标识符“pt”的前面)
//(2)error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
int num //表示有多少个走法
void AddStep(int x,int y); //将(x,y)添加进走法中
Step(void);
~Step(void);
};
CMypoint在MyPoint.h中定义过了,
请教高手这是什么情况
...全文
186 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sniffer12345 2013-03-26
  • 打赏
  • 举报
回复

class CMyPoint;
class Step
{
public:
CMyPoint pt[10];//出错行,显示有2个错误
                        //(1)error C2146: 语法错误: 缺少“;”(在标识符“pt”的前面)
                        //(2)error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
int num	 //表示有多少个走法
void AddStep(int x,int y);	 //将(x,y)添加进走法中
Step(void);
~Step(void);
};
tofu_ 2013-03-26
  • 打赏
  • 举报
回复
引用 3 楼 panyuanzhi123 的回复:
找到原因了,是因为我在Computer.h中有#include "MyPoint.h"而MyPoint.h中有#include "Computer.h"又Step.h中有#include"MyPoint.h"3个头文件有相互交叉包含,有什么方法可以解决吗?
Step.h中#include "MyPoint.h"这个是必须的,因为Step类中有MyPoint数组。 两种解决方式:要么将Computer.h和MyPoint.h合并,要么使用前置声明。 感觉上Computer.h应该可以不用包含MyPoint.h。试试在Computer.h中删除MyPoint.h的包含,然后添加class MyPoint;的前置声明。 当然,我没有看到这些文件的源码,不敢肯定Computer.h中一个前置声明就肯定能解决,不过多少试试呗。实在困难就发代码吧,这个应该比较容易解决。
Athenacle_ 2013-03-26
  • 打赏
  • 举报
回复
头文件要加保护宏。 你预处理出来看看
tofu_ 2013-03-26
  • 打赏
  • 举报
回复
前置声明能解决的问题有限,只有在后面的代码不依赖对象具体内存布局时前置声明才有效。比如说你的Step类里,有、内面包含一个MyPoint数组。因为数组分配内存时必须知道其元素的内存布局,所以前置声明在这里失去作用,你不得不#include "MyPoint.h"。
sniffer12345 2013-03-26
  • 打赏
  • 举报
回复
引用 6 楼 tofu_ 的回复:
引用 5 楼 sniffer12345 的回复:C/C++ code?123456789101112<span style="color: #FF0000;">class CMyPoint;</span>class Step{public:CMyPoint pt[10];//出错行,显示有2个错误 //(1)error C21……
笼统的前置声明不好吗?
tofu_ 2013-03-26
  • 打赏
  • 举报
回复
引用 5 楼 sniffer12345 的回复:
C/C++ code?123456789101112<span style="color: #FF0000;">class CMyPoint;</span>class Step{public:CMyPoint pt[10];//出错行,显示有2个错误 //(1)error C2146: 语法错误: 缺少“;”(在标识符“pt”……
你理解错我的意思了。我说的是Step.h文件肯定要#include "MyPoint.h"。 然后试试在Computer.h中删除#include "MyPoint.h"而改用前置声明。 最后,发文件要三个文件都发,这样我们才好判断到底怎么改比较恰当。尤其是Computer.h和MyPoint.h,需要知道它们包含对方要干啥。
panyuanzhi123 2013-03-25
  • 打赏
  • 举报
回复
找到原因了,是因为我在Computer.h中有#include "MyPoint.h"而MyPoint.h中有#include "Computer.h"又Step.h中有#include"MyPoint.h"3个头文件有相互交叉包含,有什么方法可以解决吗?
panyuanzhi123 2013-03-25
  • 打赏
  • 举报
回复
引用 1 楼 tofu_ 的回复:
这两个错误都表明编译器不知道CMyPoint这个名字。你再检查检查。 可以这样,先把无关代码注释掉,只保留CMyPoint和这个Step以及一个空main函数。这样要检查的范围最小,容易定位。实在搞不清楚,可以把注释缩减之后的代码发上来,让大家帮你看看。不过要注意说明文件结构哦。比如哪段代码是哪个文件的。
我使用的是mfc,之前Step 中是使用得POINT pt[10];程序没有问题,后来因为需要添加功能所以从CPoint类继承了CMyPoint类替换POINT,结果程序就出现了这2个问题, 以下是CMyPoint.h的内容 #include "stdafx.h" #include "Computer.h" #define priority_good 100 class Score; class CMyPoint : public CPoint { public: CMyPoint(void); ~CMyPoint(void); void SetPriority(Score & score); friend bool Greater(CMyPoint &p1,CMyPoint &p2); int priority; };
tofu_ 2013-03-25
  • 打赏
  • 举报
回复
这两个错误都表明编译器不知道CMyPoint这个名字。你再检查检查。 可以这样,先把无关代码注释掉,只保留CMyPoint和这个Step以及一个空main函数。这样要检查的范围最小,容易定位。实在搞不清楚,可以把注释缩减之后的代码发上来,让大家帮你看看。不过要注意说明文件结构哦。比如哪段代码是哪个文件的。

64,650

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧