关于C++ typedef list<类名>:iterator iterator;出错

2024-11-23 12:53:49
推荐回答(2个)
回答1:

编译器已经提示了,加上typename
typedef list >::iterator iterator;
typedef list >::const_iterator const_iterator;
改为
typedef typename list >::iterator iterator;
typedef typename list >::const_iterator const_iterator;
因为list本身就是模板,在其模板参数未确定之前,也就是Property 的具体类型没有确定之前,引用其class内部定义的type,这个type也是未知的,加上typename就是告诉编译器先不管具体类型,等模板实例化的时候再确定吧

另外,模板实现分开写,也就是写在Property.cpp中,对于大多数编译器来说,连接时会告诉找不到符号,如果不是必须隐藏实现,最好写到.h里,或者使用支持external的编译器,具体请google:c++ template external

回答2:

iterator已经是一个类型了,换一个名称吧,比如:
typedef list >::iterator PropertyIterator;
typedef list >::const_iterator PropertyConstIterator;