错误C3203:'OMSSPDisk':非专用类模板不能用作模板参数'_Kty'的模板参数,期望是真实类型

时间:2012-03-19 10:26:25

标签: c++ set

我在c ++中使用set with templates:

template<typename TKey,typename TValue>
class OMSSVDisk : public OMSSObjProperties<TKey,TValue>{
    set<OMSSPDisk> memberPDs;
};

这是在上面代码的第三行(set ...)标题中提到的错误。

OMSSObjProperties如下:

template<typename TKey,typename TValue>
class OMSSObjProperties{
    string objTypeName;
    string objTypeID;
    string objID;
    map<TKey,TValue> objProperties;
public:
    string getObjTypeName();// returns objTypeName
    string getObjTypeID();// returns objTypeID
    string getObjID();// returns objID

    void setObjTypeName(const char*);// sets objTypeName
    void setObjTypeID(const char*);// sets objTypeID
    void setObjID(const char*);// sets objID

    map<TKey,TValue> getObjProperties();
    TValue getObjPropertyValue(TKey Key);
    void setObjProperty(TKey key,TValue Value);
    string removeProperty(TKey Key);
};

和OMSSPDisk是一个类,如下所示:

template<typename TKey,typename TValue>
class OMSSPDisk : public OMSSObjProperties<TKey,TValue>{
};

这里的问题是,我们可以使用类名作为模板参数吗? 请帮我解决错误。 感谢。

5 个答案:

答案 0 :(得分:1)

可能有几个原因:

  • 未能#include <set>

  • 不符合条件setstd::set

  • 编译器没有看到OMSSPDisk。包括定义class的文件(前向声明不够,需要完整的类型)。

答案 1 :(得分:1)

OMSSPDisk是模板时,您必须在集合的声明中包含实际的模板参数。

也许

set<OMSSPDisk<TKey, TValue>> memberPDs; 

您不能拥有一组模板,您必须指定一种特定类型。

答案 2 :(得分:0)

您需要将set限定为std::set,并确保包含标题set

答案 3 :(得分:0)

确保你

#include <set>

你是

using namespace std;

答案 4 :(得分:0)

将以下内容添加到您的代码中

1)头文件

#include<set>

2)命名空间

using namespace std; // before main()

std::set<OMSSPDisk> memberPDs;