我知道这可能是一个愚蠢的问题,但我是STL的新手。我有以下问题。一个基类女巫是抽象的,得到一个派生类(CSubject),我试图声明一个地图&lt ; CStudent,双>当我尝试为该地图制作一个setter时,我得到以下错误“no operator”=“匹配这些操作数”我已经在CSubject类中声明了运算符'='。如果你能帮助我,我将非常感谢。谢谢在建议中!
class CStudent
{
....
CStudent& operator = (const CStudent& rhs)
{
this->m_szFakultetNumber = rhs.m_szFakultetNumber;
this->m_szSpecialnost = rhs.m_szSpecialnost;
this->SetName(rhs.GetName());
this->SetEGN(rhs.GetEGN());
return *this;
}
};
class CSubject
{
private:
std::string m_szDisciplineName;
std::map<std::unique_ptr<CStudent>, unsigned>m_mapOStudentGrade;
public:
void SetDisciplineName(const std::string szDisciplineName)
{
m_szDisciplineName = szDisciplineName;
}
void SetStudentGrade(const std::map<std::unique_ptr<CStudent>, double>mapOStudentGrade)
{
m_mapOStudentGrade = mapOStudentGrade;
}
};
答案 0 :(得分:3)
std::map<std::unique_ptr<CStudent>, unsigned>
是与std::map<std::unique_ptr<CStudent>, double>
不同的,不相关的类型。你需要选择其中一个,并坚持下去。
请注意,const
符合mapOStudentGrade
参数的m_mapOStudentGrade
在此处不执行任何操作,除了阻止您移动分配std::unique_ptr<CStudent>
。您需要这样做,因为std::unique_ptr<CStudent>
不可复制。
另请注意,您将无法在地图中查找项目,因为任何外部{{1}}都不会与地图中的项目等效。您的示例不包含任何此类尝试,因此对您来说可能不是问题。