地图和操作员超载C

Map and operator overloading c++

本文关键字:超载 操作员 地图      更新时间:2023-10-16

我知道这可能是一个愚蠢的问题,但我对stl.我有以下问题。我正在尝试声明地图&let;cstudent,double>,当我尝试为该地图制作一个设置器时,我会收到以下错误" no oterator" ="匹配这些操作数",我在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;
        }
};

std::map<std::unique_ptr<CStudent>, unsigned>是与 std::map<std::unique_ptr<CStudent>, double>不同的,无关的类型。您需要选择其中之一,然后坚持下去。

请注意,除了阻止您移动分配m_mapOStudentGrade之外,mapOStudentGrade参数符合CC_4参数没有任何作用。您需要这样做,因为您的std::unique_ptr<CStudent>无法复制。

还请注意,您将无法在地图中查找项目,因为任何外部std::unique_ptr<CStudent> S永远不会等于地图中的内容。您的示例不包含任何尝试,因此对您来说可能不是问题。