关于CArray模板

cqlhj 2003-12-11 04:29:51
CArray<CPoint,CPoint> Sarray;
CArray<CPoint,CPoint> Darray;
.........
Sarray.add......
Darray.add.....
现在,想将Darray里和Sarray相同的元素删除。想设计一个函数来进行这项工作,想将这个函数声明为:decdim(CArray &ddim,CArray sdim);然后就可以如下使用这个函数:decdim(Darray,Sarray);
事实是,我却不能这样作,因为这样的程序无法通过编译。
实在不知道如何作,没办法的情况下,这样解决的问题:
新增加一个非常简单的类,比如为tmpa,在这个类的声明中,有唯一成员:
CArrary<CPoint,CPoint> myarray;
然后再在程序里产生tmpa的实例:
tmpa Sarray;
tmpa Darray;
然后,声明一个函数:
decdim(tmpa &ddim,tmpa sdim)
{
......
ddim.myarray.......
sdim.myarray....
}
.....
最后可以:
decdim(Darray,Sarray);
这样子虽然解决了问题。可觉得非常难过。
万望哪位高手能给指条明路,给个正确的方法。
还有,因水平太差,也许没说清楚,见笑了。
哦,想起来了,也许就是一个如何解决向一个函数传递CArray模板参数的问题,真的希望你能看看。
...全文
139 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
cqlhj 2003-12-14
  • 打赏
  • 举报
回复
刚才又试了一下,如果将声明里的decdim(CArray<CPoint,CPoint> &ddim, CArray<CPoint,CPoint> sdim);
改为decdim(CArray<CPoint,CPoint> &ddim, CArray<CPoint,CPoint> &sdim);
后,不出现刚才的错误,但又出现这个错误:
正在编译...
arrayDlg.cpp
正在生成代码...
正在跳过...(未检测到相关更改)
array.cpp
正在链接...
arrayDlg.obj : error LNK2019: 无法解析的外部符号 "protected: int __thiscall CarrayDlg::decdim(class CArray<class CPoint,class CPoint> &,class CArray<class CPoint,class CPoint> &)" (?decdim@CarrayDlg@@IAEHAAV?$CArray@VCPoint@@V1@@@0@Z) ,该符号在函数 "protected: virtual int __thiscall CarrayDlg::OnInitDialog(void)" (?OnInitDialog@CarrayDlg@@MAEHXZ) 中被引用
Debug/array.exe : fatal error LNK1120: 1 个无法解析的外部命令

生成日志保存在“file://d:\cqlhjdate\lhjprogram\six-2\array\Debug\BuildLog.htm”中
array - 2 错误,0 警告


---------------------- 完成 ---------------------

生成: 0 已成功, 1 已失败, 0 已跳过
cqlhj 2003-12-14
  • 打赏
  • 举报
回复
非常感谢各位的答复!今天才有机会上网,马上试了试。可是,编译时还是出现下面的错误:
正在编译...
arrayDlg.cpp
d:\array\arrayDlg.cpp(55) : error C2664: “CarrayDlg::decdim” : 不能将参数 2 从“CArray<TYPE,ARG_TYPE>”转换为“CArray<TYPE,ARG_TYPE>”
with
[
TYPE=CPoint,
ARG_TYPE=CPoint
]
and
[
TYPE=CPoint,
ARG_TYPE=CPoint
]
没有可用于 class“CArray<TYPE,ARG_TYPE>”的复制构造函数,或构造函数试图执行到非 __gc 引用的非法转换
with
[
TYPE=CPoint,
ARG_TYPE=CPoint
]

生成日志保存在“file://d:\array\Debug\BuildLog.htm”中
array - 1 错误,0 警告

---------------------- 完成 ---------------------

生成: 0 已成功, 1 已失败, 0 已跳过

还请各位大哥给予再指教!
114sky 2003-12-11
  • 打赏
  • 举报
回复
decdim(CArray<CPoint,CPoint> &ddim, CArray<CPoint,CPoint> sdim);

hz张三 2003-12-11
  • 打赏
  • 举报
回复
不用建附加类的
hz张三 2003-12-11
  • 打赏
  • 举报
回复
#include <afxtempl.h>
直接这样声明就可以了。
decdim(CArray<CPoint,CPoint> &ddim, CArray<CPoint,CPoint> sdim);

嫌麻烦的话
typedef CArray<CPoint,CPoint> CPtArray;

#define CPtArray (CArray<CPoint,CPoint>)

ggw007 2003-12-11
  • 打赏
  • 举报
回复
同意楼上的方法
bluebohe 2003-12-11
  • 打赏
  • 举报
回复
decdim(&ddim,&sdim);
decdim(CArray *pddim,CArray *psdim)
{
pddim->…………

}
afantict 2003-12-11
  • 打赏
  • 举报
回复
h


#include <afxtempl.h>

class ag
{
public:
CArray<CPoint,CPoint> myarray;
ag();
virtual ~ag();
bool decdim(CArray<CPoint,CPoint> ddim, CArray<CPoint,CPoint> sdim);


};

cpp

bool ag::decdim(CArray<CPoint,CPoint> ddim, CArray<CPoint,CPoint> sdim)
{
return true;
}

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧