映射和运算符重载c ++

时间:2018-03-26 08:41:04

标签: c++ dictionary stl

我知道这可能是一个愚蠢的问题,但我是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;
        }

};

1 个答案:

答案 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}}都不会与地图中的项目等效。您的示例不包含任何此类尝试,因此对您来说可能不是问题。