迭代器和模版的问题

pubb1986 2007-03-26 10:26:47
template<class T>
class CPtr
{
protected:
friend class CPtrlist<T>;
typedef CPtrlist<T> smart_list;
public:
Get();
.....
.....
}

template<class _Obj,class _A = allocator<_Obj *> >
class CPtrlist
{
friend class CPtr<_Obj>;
public:
typedef CPtr<_Obj> _Ty;
typedef CPtrlist<_Obj, _A> _Myt;
public:
Get();
.....
.....
}

//使用: CDBolt为已知类
typedef CPtrlist<CDBolt> CDBoltPtrList;
CDBoltPtrList m_DBoltPtrList;

typedef CPtrlist<CDBolt>::iterator CDBoltIt;

for(CDBoltIt it=m_DBoltPtrList.begin();it != m_DBoltPtrList.end();++it)
{
*it.Get();
}
编译有问题 提示'.Get' must have class/struct/union type
我头文件什么的有加了的,总感觉*it 的类型有点问题
前辈们请指点指点 万分感谢



...全文
390 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
pubb1986 2007-03-26
  • 打赏
  • 举报
回复
Ptr类里的Get返回的是T类型
PtrList类里的Get返回的是_Ty类型的
chenyu2202863 2007-03-26
  • 打赏
  • 举报
回复
你的 GET()返回甚么类型?默认?C++是沒有默认的类型
pubb1986 2007-03-26
  • 打赏
  • 举报
回复
不行哎 和*it一样。。。
zhu_guo 2007-03-26
  • 打赏
  • 举报
回复
你看这样做成不(*it).Get()
pubb1986 2007-03-26
  • 打赏
  • 举报
回复
reference operator*() const
{return (_Acc::_Value(_Ptr)); }

struct _Acc {
static _Vref _Value(_Nodeptr _P)
{return ((_Vref)(*_P)._Value); }
};

typedef _POINTER_X(_Node, _A) _Nodeptr;
struct _Node {
_Nodeptr _Next, _Prev;
_Ty _Value;
};

才发现原来返回类型就是typedef CPtr<_Obj> _Ty;中的CPtr<_Obj>类型

但是为什么我对*it做点操作的时候没能点出Ptr下的方法呢?

谢谢taodm前辈的提示 哈哈
taodm 2007-03-26
  • 打赏
  • 举报
回复
得看iterator的operator *接口。
pubb1986 2007-03-26
  • 打赏
  • 举报
回复
但 我在使用*it的时候 点不出ptrlist的方法 点出来就3个distance_type、iterator_category、value_type 怎么觉得*it还是个迭代器呢?
pubb1986 2007-03-26
  • 打赏
  • 举报
回复
iterator 是在CPtrList类里的

friend class iterator;
class iterator : public const_iterator {
public:
iterator()
{}
iterator(_Nodeptr _P)
: const_iterator(_P) {}
.....
.....
}
是不是意味着返回的是PtrList类型呢?
taodm 2007-03-26
  • 打赏
  • 举报
回复
"*it是什么类型呢",得看你iterator的定义。
pubb1986 2007-03-26
  • 打赏
  • 举报
回复
刚才我写错了的 GET方法写的没问题的 请问下 在调用*it 的时候 *it是什么类型呢?
taodm 2007-03-26
  • 打赏
  • 举报
回复
Get();声明错误,没有返回类型。
taodm 2007-03-26
  • 打赏
  • 举报
回复
你应该自己解决这个问题,而且你也有能力解决这个问题。
不要依赖编辑器自动提示函数!
pubb1986 2007-03-26
  • 打赏
  • 举报
回复
我的QQ 542731905
MSN pubb6287@163.com
pubb1986 2007-03-26
  • 打赏
  • 举报
回复
但是it后面用指针指出来没有什么方法的啊 就和原先一样的只有3个
taodm前辈 能否给下你的msn 或则QQ吗? 我把代码传你 你看下吧 麻烦你了
taodm 2007-03-26
  • 打赏
  • 举报
回复
if(it->Comp(*DBoltPtr))不就可以了嘛。
pubb1986 2007-03-26
  • 打赏
  • 举报
回复
bool CAnchorRods::IsAlreadyExist(const CDBoltPtr &DBoltPtr)
{
......
......
if(((CDMAnchor *)(*it).Get())->Comp(*DBoltPtr))
{

}
.....
.....
}
进行类型比较,来判断是否在PtrList中已经存在
taodm 2007-03-26
  • 打赏
  • 举报
回复
这个是get方法的作用,不是你为啥想调Get方法
pubb1986 2007-03-26
  • 打赏
  • 举报
回复
Get方法是为了获得PtrList里存放 通过Ptr模版定义的类定义的指针的类型
taodm 2007-03-26
  • 打赏
  • 举报
回复
不如说说你为啥想调Get方法吧。
容器的特点就是只想让你触碰最终类型,而不是中间层的辅助类。
pubb1986 2007-03-26
  • 打赏
  • 举报
回复
现在的 *it是 CDBolt类型的 但这样就调不到Get()方法了的啊?
加载更多回复(1)

64,691

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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