如何生成非标准类的动态二维数组

/*条件说明:
先定义了一个Point结构体(struct Point{...});
在Round.h头文件中我定义了一个Round类(class Round{...}),类中有一个全局变量BoardSize(static int BoardSize;),还有一个用于生成二维数组的类型为Point的双重指针Board(Point **Board;);
在Round.cpp文件中,我想通过以下方式生成一个Board[BoardSize][BoardSize]的二维数组,元素为Point类,但是出错了:*/
void Round::Option()
{
int size;
cin>>size;
BoardSize=size;
**Board = new Point *[BoardSize];//该步出错,提示“没有与这些操作数匹配的“=”运算符。

for(int i=0;i<BoardSize;i++)
{
Board=new Point[BoardSize];
}
}
/*这是个什么问题?需要重载运算符=吗?还望各位不吝赐教。*/
/*此方式参考了网上的一些方法,但那些都不是自定义的类(如Point),是因为这个原因吗?或者能给出比较好的创建动态二维数组(BoardSize*BoardSize大小)的方式也行*/

推荐  (0) | 0人关注关注
3个答案
6 0

精英王子高中退学,独立开发者,独立博客作者,深度 Git...

2012-06-23 05:50

楼主要学会抽象出问题所在,个人感觉你的问题很难让人在第一时间看懂,和问题无关的描述太多.....

简单说楼主就是要这样一段代码:

class Point
{

};

Point **Board;
const int BoardSize=10;

int main()
{
Board = new Point*[BoardSize]; //去掉两个星号

for(int i=0;i<BoardSize;i++)
{
Board=new Point[BoardSize];
}
}

以上代码在G++4.7编译通过.

Board是一个二维数组,就是说它的每一个元素都指向一个普通Point数组,也就是它的每一个元素都是Point*类型.

我们先给Board分配内存,所以我们需要申请BoardSizePoint*类型,分配给它.
然后给Board中的每个元素,也就是每个Point*类型分配内存,需要为它们每个申请BoardSizePoint类型.

你的代码错在Board前多了两个星号,也就是对Board进行了两次解指针,Board在一开始指向一个随机地址,你却对它解指针,这会导致运行时错误.
当然,上面一点不是关键。new运算符会返回申请到的内存的地址(对数组来说是首地址),在这里也就是Point**类型,你却赋值给一个Point类型(Point**类型在解两次指针后是Point类型),这当然会提示“no match for 'operator=' in XXXXXXX”了.

建议楼主重读C++的书中有关指针和数组的章节.

0 0

Board前面不需要**吧
**Board指Board取值再取值得到point型数据

0 0

c语言已经忘光了……不过看着真像我写的数独程序,board是棋盘,round是一回合……

查看更多

添加回答

登录 后回答问题,你也可以用以下帐号直接登录

相关问答

关于我们 加入果壳 媒体报道 帮助中心 果壳活动 家长监控 免责声明 联系我们 移动版 移动应用

©果壳网    京ICP证100430号    京网文[2015] 0609-239号    新出发京零字东150005号     京公网安备11010502007133号

违法和不良信息举报邮箱:jubao@guokr.com    举报电话:18612934101    网上有害信息举报专区    儿童色情信息举报专区