错误:将“ const std :: __ cxx11 :: list <>”传递为“ this”参数会丢弃限定符

时间:2019-10-19 09:58:05

标签: c++ const

我有一个小问题,找不到解决方法。

在我的.hpp文件中,我声明了这两个函数和struct,但由于“此”参数放弃了限定词,因此出现了“通过const std :: __ cxx11 :: list <>”错误。

struct Student {
    std::string name;
    std::string student_id;

};

class StudentRegistry {

public:
    StudentRegistry(){}
    void Add(const Student &t);
    const std::list<Student>& GetStudents() const;

private:
    std::list<Student> students;
};

在.cpp文件中,我尝试执行以下操作:

void StudentRegistry::Add(const Student &t){
    this->GetStudents().push_back(t);
}

const std::list<Student>& StudentRegistry::GetStudents() const{
    return students;
}

我该如何做?

1 个答案:

答案 0 :(得分:2)

const std::list<Student>& GetStudents() const;

this->GetStudents().push_back(t);

有冲突。您有修改从GetStudents()获得的列表的合同,但是您尝试使用push_back进行修改。

解决方案:

void StudentRegistry::Add(const Student& t) {
    students.push_back(t);
}