明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5181|回复: 3

AcArray的使用问题?

[复制链接]
发表于 2008-4-14 23:54:00 | 显示全部楼层 |阅读模式

我定义了一个动态数组

typedef AcArray<CString> AcDbLayerNameArray;

在使用时,

AcDbLayerNameArray  layerNameArray;

ACHAR* strLayerName;

CString str;

int i;

for (i=0; i<10; i++){

// 获得 strLayerName ;

str.Format(L"%s", strLayerName);
layerNameArray.append(str); 

}

当i=8时,出错。不知道什么原因?

另外在AcArray的定义中,有

template <class T, class R = AcArrayMemCopyReallocator<T> > class AcArray
{
public:
    AcArray(int initPhysicalLength = 0, int initGrowLength = 8);
    AcArray(const AcArray<T,R>&);
    ~AcArray();
。。。

}

好像是layerNameArray的大小被固定在initGrowLength = 8了,没能动态变化?

发表于 2008-4-15 12:36:00 | 显示全部楼层
本帖最后由 作者 于 2008-4-15 12:38:24 编辑

你的使用有问题。AcArray是用来放ACAD自己做的类的,通常是AcDbObjectId等等。你要装其他实例,需要对第二个默认参数进行设置。建议不要用AcArray来装String这些东西。没必要,完全可以用STD的类来代替。

 楼主| 发表于 2008-4-15 13:08:00 | 显示全部楼层

使用MFC时,定义成typedef AcArray<ACHAR *> AcDbLayerNameArray;可以通过,不过

因为不能用contains等函数,有点麻烦.看来AcArray仅能定义自己的类和简单的型.其他的还得用CArray.

发表于 2008-4-16 20:39:00 | 显示全部楼层

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

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 16:38 , Processed in 0.155523 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表