读书人

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

发布时间: 2013-04-07 12:50:11 作者: rapoo

类中声明对象数组出现问题
编译器为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中定义过了,
请教高手这是什么情况
[解决办法]

引用:
找到原因了,是因为我在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中一个前置声明就肯定能解决,不过多少试试呗。实在困难就发代码吧,这个应该比较容易解决。
[解决办法]
前置声明能解决的问题有限,只有在后面的代码不依赖对象具体内存布局时前置声明才有效。比如说你的Step类里,有、内面包含一个MyPoint数组。因为数组分配内存时必须知道其元素的内存布局,所以前置声明在这里失去作用,你不得不#include "MyPoint.h"。

读书人网 >C++

热点推荐