jkbanana 发表于 2008-4-14 23:54:00

AcArray的使用问题?

<p>我定义了一个动态数组</p><p>typedef AcArray&lt;CString&gt; AcDbLayerNameArray;</p><p></p><p>在使用时,</p><p>AcDbLayerNameArray&nbsp; layerNameArray;</p><p>ACHAR* strLayerName;</p><p>CString str;</p><p>int i;</p><p>for (i=0; i&lt;10; i++){</p><p>// 获得 strLayerName ;</p><p>str.Format(L"%s", strLayerName);<br/>layerNameArray.append(str);&nbsp; </p><p>}</p><p>当i=8时,出错。不知道什么原因?</p><p>另外在AcArray的定义中,有</p><p>template &lt;class T, class R = AcArrayMemCopyReallocator&lt;T&gt; &gt; class AcArray<br/>{<br/>public:<br/>&nbsp;&nbsp;&nbsp; <font color="#000000"><font size="2">AcArray(int initPhysicalLength = 0, <font color="#f70968" size="4">int initGrowLength = 8</font>);</font><br/></font>&nbsp;&nbsp;&nbsp; AcArray(const AcArray&lt;T,R&gt;&amp;);<br/>&nbsp;&nbsp;&nbsp; ~AcArray();<br/>。。。</p><p>}</p><p>好像是layerNameArray的大小被固定在initGrowLength = 8了,没能动态变化?</p><p></p>

bluelightcsy 发表于 2008-4-15 12:36:00

本帖最后由 作者 于 2008-4-15 12:38:24 编辑 <br /><br /> <p>你的使用有问题。AcArray是用来放ACAD自己做的类的,通常是AcDbObjectId等等。你要装其他实例,需要对第二个默认参数进行设置。建议不要用AcArray来装String这些东西。没必要,完全可以用STD的类来代替。</p>

jkbanana 发表于 2008-4-15 13:08:00

<p>使用MFC时,定义成typedef AcArray&lt;ACHAR *&gt; AcDbLayerNameArray;可以通过,不过</p><p>因为不能用contains等函数,有点麻烦.看来AcArray仅能定义自己的类和简单的型.其他的还得用CArray.</p>

bluelightcsy 发表于 2008-4-16 20:39:00

<p>这是CAD提供的Array,你要装别的类型也是可以的,我相信调用contains应该都没有问题,它底层的实现应该还是STD的东西吧。关键你用AcArray传复杂对象,你得告诉它怎么去析构这里面的每个实例,也就是第二个原来默认的参数要进行设置。</p>
页: [1]
查看完整版本: AcArray的使用问题?