1 c++
我有一个模板类,我想在地图中使用该类的对象(以及参数化类型).到目前为止,这是我能够达到的解决方案:
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
};
Run Code Online (Sandbox Code Playgroud)
但是当我尝试编译这段代码时,我得到了一长串错误:
/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;' 在"ParamITier"之前/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:它'未声明(首先使用此函数)/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:对'unclared(首先使用此函数)/home/gayanm/street/src/QueryServer_NEW/ITier.h:74:错误:在'之前预期的primary-expression',令牌/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:错误:'{'标记之前的预期类名
你能指出如何解决这些问题吗?
谢谢.