我在通过调用名称的getter方法来打印列表中包含的每个对象的名称时遇到了一个问题。 我有班上的学生。 这个类包含一个Course类型对象列表和一个名为printData()的方法,它内部有一个迭代器,用于遍历该列表以获取每个Course类型对象,并为每个对象调用getCourseName()方法以打印其名称。 当我构建我的程序时,我会遇到以下3个错误:
1)“operator=”不匹配(操作数类型为“const iterator”{aka“const std::_list_iterator”}和“std::__cxx11::list::const_iterator”{aka“std::_list_const_iterator”})
2)将“const iterator”{aka“const std::_list_iterator”}作为“this”参数传递将丢弃限定符
3)“const iterator”{aka“const struct std::_list_iterator”}没有名为“get coursename”的成员
有人能给我解释一下为什么我会得到这些错误,为什么我不能调用getter来打印名称吗?。 谢谢。
学生班级:
class Sudent
{
list<Course> courses;
public:
Student(list<Course> &c);
}
学生类构造函数:
Student::Student(list<Course> &c):
{
this->courses = c;
}
学生类printData方法:
void Student::printData() const
{
list<Course>::iterator it;
for(it = courses.begin(); it != courses.end(); it++)
{
cout << *it.getCourseName(); //It doesn't show me the option to choose from methods of Course class
}
}
课程类别:
class Course
{
string nameOfCourse;
public:
Course(string n);
string getCourseName();
};
课程类构造函数:
Course::Course(string n)
{
nameOfCourse = n;
}
Course getCourseName方法:
string Course::getCourseName()
{
return nameOfCourse;
}
主:
int main()
{
Course c1("Math");
Course c2("Algebra");
Course c3("Geometry");
Course arr[3] = {c1, c2, c3};
list<Course> course_param;
for(int i = 0; i < 3; i++)
{
course_param.push_back(arr[i]);
}
Student stud1(course_param);
stud1.printData(); //I want to print the names of student's courses;
}
1)Student::PrintData()是常量,因此courses.begin()是不能分配给非常量迭代器的List::Const_Iterator
2)course::getCoursename()不是常量,因此不能从常量上下文调用它。
请看一下这段代码:
class Course {
public:
Course(const string& n) : nameOfCourse(n) {}
const string& getCourseName() const noexcept { return nameOfCourse; }
private:
string nameOfCourse;
};
class Student {
public:
Student(list<Course> c) : courses(std::move(c)) {}
void printData() const noexcept {
for (const auto& course : courses) {
cout << course.getCourseName() << "\n";
}
}
private:
list<Course> courses;
};
int main() {
Student stud1({ Course("Math"), Course("Algebra"), Course("Geometry") });
stud1.printData(); //I want to print the names of student's courses;
}