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

头文件Property.h:#include<string>template<className=string,classType=double>classPropert... 头文件Property.h:
#include <string>
template <class Name = string, class Type = double> class Property
{
private:
Name nam;
Type con;
public:
// Constructors
Property(const Name& name);
};

在程序Property.cpp中给出构造函数:
template <class Name, class Type>
Property< Name, Type>::Property(const Name& name, const Type& t)
{// Constructor
nam = name;
con = t;
}
头文件SimplePropertySet.h:
#include <Property.cpp>
#include <list>
#include <set>
using namespace std;

template <class N, class V> class SimplePropertySet
{
private:
N nam;
list<Property<N,V> > sl;
public:
// User can use the STL iterator
typedef list<Property<N,V> >::iterator iterator;
typedef list<Property<N,V> >::const_iterator const_iterator;
};
typedef list<Property<N,V> >::iterator iterator; 编译时出错,为什么呢?
按一楼换了名字似乎还不行

编译器跟之前同样提示:
warning C4346: “std::list<Property<Name,Type>>::iterator”: 依赖名称不是类型
1> 用“typename”为前缀来表示类型
参见对正在编译的类 模板 实例化“SimplePropertySet<N,V>”的引用
error C2144: 语法错误 : “std::iterator”的前面应有“;”
error C2208: “std::iterator”: 没有使用此类型进行定义的成员
fatal error C1903: 无法从以前的错误中恢复;正在停止编译

我怀疑可能是编译器没找到iterator的类型,该怎么做呢?
展开
 我来答
百度网友fefbf9e
2011-04-28 · TA获得超过1364个赞
知道小有建树答主
回答量:176
采纳率:0%
帮助的人:105万
展开全部
编译器已经提示了,加上typename
typedef list<Property<N,V> >::iterator iterator;
typedef list<Property<N,V> >::const_iterator const_iterator;
改为
typedef typename list<Property<N,V> >::iterator iterator;
typedef typename list<Property<N,V> >::const_iterator const_iterator;
因为list本身就是模板,在其模板参数未确定之前,也就是Property<N,V> 的具体类型没有确定之前,引用其class内部定义的type,这个type也是未知的,加上typename就是告诉编译器先不管具体类型,等模板实例化的时候再确定吧

另外,模板实现分开写,也就是写在Property.cpp中,对于大多数编译器来说,连接时会告诉找不到符号,如果不是必须隐藏实现,最好写到.h里,或者使用支持external的编译器,具体请google:c++ template external
小止学编程
2011-04-27 · TA获得超过133个赞
知道答主
回答量:74
采纳率:0%
帮助的人:89.4万
展开全部
iterator已经是一个类型了,换一个名称吧,比如:
typedef list<Property<N,V> >::iterator PropertyIterator;
typedef list<Property<N,V> >::const_iterator PropertyConstIterator;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式