提问者:小点点

如何获取列表的每个对象并调用getName方法来打印它的名称


我在通过调用名称的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个答案

匿名用户

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;
}