📄 subject_31504.htm
字号:
<p>
序号:31504 发表者:star_jj 发表日期:2003-03-04 23:07:17
<br>主题:A* ary = new A[10]; A* a= new A( ); ary[0]=a, 为什么错了?
<br>内容:我的程序里有这样的code:<BR><BR>Fascicle* fasAry = new Fascicle[100];<BR><BR>Fascicle* fas = new Fascicle();<BR><BR>fasAry[0] = fas;<BR><BR>compile 的时候出现以下错误:<BR>error C2679: binary '=' : no operator defined which takes a right-hand operand of type 'class Fascicle *' (or there is no acceptable conversion)<BR><BR><BR><BR>请问是什么原因啊?<BR>我不熟悉c++ ,请问上面的code因该怎样写才正确啊?
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:tjhe 回复日期:2003-03-04 23:20:27
<br>内容:Fascicle* fasAry = new Fascicle[100]; //fasAry代表一个对象数组,fasAry[i]为一个对象<BR><BR>Fascicle* fas = new Fascicle(); //fas 是一个对象的指针<BR><BR>fasAry[0] = fas; //将一个对象的指针赋给一个对象,此operator = 没有定义(除非重载=让其具有该功能)<BR><BR>根据你的意思,这样:<BR>Fascicle* fasAry[100];<BR><BR>Fascicle* fas = new Fascicle();<BR><BR>fasAry[0] = fas;<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:star_jj 回复日期:2003-03-05 00:18:00
<br>内容:tjhe, 谢谢你指出我的问题。 <BR><BR>因为我以前是学java的, 所以总是对C++的pointer很头疼。我还有个问题请教,我有一个function要读进楼上的那个array : fasAry 和这个array的size. return 一个新的array.<BR><BR>Line1 Fascicle*[] OperationMain::extendArray(Fascicle*[] fary, int size)<BR>Line2 {<BR>Line3 Fascicle* fbry[size+100];<BR>Line4 for(int i=0; i<size; i++)<BR>Line5 fbry[i] = fary[i];<BR><BR>Line6 delete fary;<BR>Line7 return fbry; <BR>Line 8 }<BR><BR>我的line1里面的 return type "Fascicle*[]"写得对吗? 就是指一个装Fascicle* 的array.:$<BR><BR>在OperationMain.h里面相应的 prototype<BR> Fascicle*[] extendArray( Fascicle*[] , int );<BR>是不是这样写啊? <BR><BR>多谢多谢!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:xiongli 回复日期:2003-03-05 01:19:53
<br>内容:你编译一下就可以了<BR>不过对于数组,c++是当成const pointer来处理的,就是说这个pointer不能去指向别的东西,所以对于type *[] 就等于是 type **<BR>所以在main(int argc,char *argv[])===main(int argc,char **argv)<BR>所以return type 最好是type **
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:tjhe 回复日期:2003-03-05 10:16:54
<br>内容:Fascicle*[] //表达是错误的,<BR>delete fary; //fary是局部数组变量,不能delete<BR>return fbry; //fbry是局部数组变量(元素类型Fascicle*),返回时退化成Fascicle**,<BR>//实际上无法返回数组(因为相当于返回局部变量的地址)<BR><BR>//可以如下:<BR>typedef Fascicle* PFASCICLE; //这样使程序更易读<BR><BR>FASCICLE* OperationMain::extendArray(FASCICLE fary[], unsigned int oldsize, unsigned int addsize)<BR>{<BR> if(oldsize < addsize) //此处应该保证addsize的大小合法,不然以下的循环回出现非法访问<BR> return NULL;<BR> FASCICLE* fbry = new FASCICLE[addsize+oldsize]; //堆上申请内存<BR> for(int i=0; i<addsizee; i++)<BR> fbry[i] = fary[i]; <BR><BR> return fbry; <BR>}<BR><BR>//该函数的调用者应负责删除该函数在堆上申请的内存。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:star_jj 回复日期:2003-03-05 15:05:15
<br>内容:偶像!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:star_jj 回复日期:2003-03-05 15:53:46
<br>内容:可是为什么不能 delete fbry 呢?<BR>这个fbry以后都不会用到了
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:star_jj 回复日期:2003-03-05 15:55:24
<br>内容:错了错了, 为什么不能delete fary.<BR><BR>fary 好像不是局部变量吧
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:tjhe 回复日期:2003-03-05 16:05:40
<br>内容:fary是数组,不用delete删除。<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -