错误 C3203:'OMSSPDisk':非专用类模板不能用作模板参数"_Kty"的模板参数,应为实际类型

error C3203: 'OMSSPDisk' : unspecialized class template can't be used as a template argument for template parameter '_Kty', expected a real type

本文关键字:参数 Kty 类型 不能 OMSSPDisk C3203 专用 错误      更新时间:2023-10-16

我在c++中使用带有模板的集合:

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

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

OMSSObj属性如下:

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>{
};

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

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

也许

set<OMSSPDisk<TKey, TValue>> memberPDs; 

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

可能有以下几种原因:

  • #include <set> 故障

  • 不符合set:std::set

  • 编译器看不到CCD_ 5。包括定义class的文件(仅向前声明是不够的,您需要一个完整的类型)。

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

确保

#include <set>

而你是

using namespace std;

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

1) 头文件

#include<set>

2) 命名空间

using namespace std; // before main()

std::set<OMSSPDisk> memberPDs;