【发布时间】:2009-01-15 04:59:19
【问题描述】:
我有一个模板类,我想在地图中使用该类的对象(以及参数化类型)。到目前为止,这是我能够得出的解决方案:
class IStatMsg;
template <typename T>
class ITier
{
public:
// Methods
ITier(TierType oType) : o_Type(oType){};
virtual ~ITier(){};
typename ITier<T> ParamITier; // line 60
ITier* Get(T oKey)
{
std::map<T, ParamITier*>::iterator it = map_Tiers.find(oKey); // line 64
if (it != map_Tiers.end())
return it->second;
return NULL;
}
void Set(T oKey, ITier* pTier)
{
map_Tiers.insert(pair<T, ParamITier*>(oKey, pTier)); // line 74
}
TierType GetType() { return o_Type; }
protected:
// Methods
// Attributes
std::map<T, ParamITier*> map_Tiers; // line 83
TierType o_Type;
private:
// Methods
// Attributes
};
但是当我尝试编译这段代码时,我得到了一长串错误:
/home/gayanm/street/src/QueryServer_NEW/ITier.h:60: 错误:预期的嵌套名称说明符 /home/gayanm/street/src/QueryServer_NEW/ITier.h:60: 错误:
ITier<T>' specified as declarator-id /home/gayanm/street/src/QueryServer_NEW/ITier.h:60: error: perhaps you wantITier' 对于构造函数 /home/gayanm/street/src/QueryServer_NEW/ITier.h:60: 错误:两个或多个数据类型ITier<T>' /home/gayanm/street/src/QueryServer_NEW/ITier.h:60: error: expected的声明;'前 “参数层” /home/gayanm/street/src/QueryServer_NEW/ITier.h:83: 错误:ParamITier' was not declared in this scope /home/gayanm/street/src/QueryServer_NEW/ITier.h:83: error: template argument 2 is invalid /home/gayanm/street/src/QueryServer_NEW/ITier.h:83: error: template argument 4 is invalid /home/gayanm/street/src/QueryServer_NEW/ITier.h:83: error: ISO C++ forbids declaration ofmap_Tiers' 没有类型 /home/gayanm/street/src/QueryServer_NEW/ITier.h: 在成员函数ITier<T>* ITier<T>::Get(T)': /home/gayanm/street/src/QueryServer_NEW/ITier.h:64: error:ParamITier' 中未声明(首先 使用此功能) /home/gayanm/street/src/QueryServer_NEW/ITier.h:64: 错误:(每个未声明的标识符都是 每个函数只报告一次 它出现在。) /home/gayanm/street/src/QueryServer_NEW/ITier.h:64: 错误:模板参数 2 无效 /home/gayanm/street/src/QueryServer_NEW/ITier.h:64: 错误:模板参数 4 无效 /home/gayanm/street/src/QueryServer_NEW/ITier.h:64: 错误:预期;' before '::' token /home/gayanm/street/src/QueryServer_NEW/ITier.h:66: error:it'未声明(首先使用这个 功能) /home/gayanm/street/src/QueryServer_NEW/ITier.h:66: 错误:请求成员end' in((ITier)this)->ITier::map_Tiers', 这是非类类型int' /home/gayanm/street/src/QueryServer_NEW/ITier.h: In member functionvoid ITier::Set(T, ITier)': /home/gayanm/street/src/QueryServer_NEW/ITier.h:74: 错误:请求成员insert' in((ITier*)this)->ITier::map_Tiers', 这是非类类型int' /home/gayanm/street/src/QueryServer_NEW/ITier.h:74: error:pair'未声明(第一次使用 这个功能) /home/gayanm/street/src/QueryServer_NEW/ITier.h:74: 错误:预期的主表达式 在 ',' 标记之前 /home/gayanm/street/src/QueryServer_NEW/ITier.h:74: 错误:ParamITier' undeclared (first use this function) /home/gayanm/street/src/QueryServer_NEW/ITier.h:74: error: expected primary-expression before '>' token /home/gayanm/street/src/QueryServer_NEW/ITier.h: At global scope: /home/gayanm/street/src/QueryServer_NEW/ITier.h:93: error: baseITier' 与 类中只有非默认构造函数 没有构造函数 /home/gayanm/street/src/QueryServer_NEW/ITier.h:109: 错误:“{”之前的预期类名 令牌
能否请您指出如何解决这些问题?
谢谢。
【问题讨论】:
标签: c++