找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1017|回复: 6

自定义实体不兼容STL的vector?

[复制链接]
发表于 2006-1-27 18:25:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
我把自定义的实体放到vector中,然后用“=”对另一个空vector赋值,编译无法通过,出现如下错误:


c:\Program Files\Microsoft Visual Studio .NET\Vc7\include\xmemory(42) : error C2661: “AcHeapOperators::operator new” : 没有重载函数接受 2 个参数
        c:\Program Files\Microsoft Visual Studio .NET\Vc7\include\xmemory(127) : 参见对正在编译的函数模板实例化“void std::_Construct(_T1 *,const Board &)”的引用
        with
        [
            _T1=Board
        ]
        c:\Program Files\Microsoft Visual Studio .NET\Vc7\include\xmemory(126) : 编译类模板成员函数“void std::allocator<_Ty>::construct(std::allocator<_Ty>::pointer,const Board &)”时
        with
        [
            _Ty=Board
        ]
        c:\Program Files\Microsoft Visual Studio .NET\Vc7\include\vector(19) : 参见对正在编译的类模板实例化“std:: allocator<_Ty>”的引用
        with
        [
            _Ty=Board
        ]
        c:\Program Files\Microsoft Visual Studio .NET\Vc7\include\vector(35) : 参见对正在编译的类模板实例化“std:: _Vector_val<_Ty,_Alloc>”的引用
        with
        [
            _Ty=Board,
            _Alloc=std::allocator<Board>
        ]
        d:\moca\core\BoardFrame.h(38) : 参见对正在编译的类模板实例化 “std::vector<_Ty,_Ax>”的引用
        with
        [
            _Ty=Board,
            _Ax=std::allocator<Board>
        ]


“AcHeapOperators::operator new” 的问题出现在这一段代码中
template<class _T1,
    class _T2> inline
    void _Construct(_T1 _FARQ *_Ptr, const _T2& _Val)
    {    // construct object at _Ptr with value _Val
    new ((void _FARQ *)_Ptr) _T1(_Val);
    }


其中_T1=Board


我把从AcDbEntity继承注销掉之后,编译就通过了。这是怎么回事啊?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-1-28 16:54:29 | 显示全部楼层
凡是以AcHeapOperators为基类的对象应该都会出现这个问题。原因在于new、delete操作符被作了限制(在好几个基类层次上)。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-6 11:34:21 | 显示全部楼层
那么这个问题能不能解决?通过重载new什么的,有没有人试过?会不会有风险
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-2-8 10:11:47 | 显示全部楼层
是因为你没有重载 new 操作,导致在进行 “=”操作时,程序无法通过new 操作分配新的空间,导致"="操作失败,maybe~ :)
建议不要直接进行 “=”操作,可以直接将新的vector中保存原有指针,或者重新clone一个实体,再进行追加到vector中
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-2-11 21:05:12 | 显示全部楼层
不知道你是怎么用的:(
我想是不是因为
void *operator new[](unsigned nSize) { return 0; }
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-2-12 10:35:52 | 显示全部楼层
所有从AcDbObject派生的类都无法使用operator new[],我想主要是AutoDesk公司考虑到VC6.0和VC5.0编译器不能很好地处理数组的内存申请吧。所以用vector时可能存在问题。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-2-12 22:47:18 | 显示全部楼层
但在VC7下也有类似的问题,用vector在两个类之间传递数据进行修改时,delete某个节点有时会出问题,也不知道是什么原因。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-15 13:45 , Processed in 0.207047 second(s), 43 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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