我在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>{
};
这里的问题是,我们可以使用类名作为模板参数吗? 请帮我解决错误。 感谢。
答案 0 :(得分:1)
可能有几个原因:
未能#include <set>
不符合条件set
:std::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;