передача в экземпляр класса в качестве другого параметра класса

0
Course newCourse(id,instructor[id2],name,dept);
Course::courseList.insert(std::pair<int,Course>(id,newCourse));

Это часть кода, где я называю конструктором класса курса. Инструктор [id2] - это то, как я думал, что это может сработать, но это не так.

 Course(int courseId, Instructor instructor, string courseName, string   dept)
 :courseId(courseId),instructor(instructor),courseName(courseName),dept(dept)
 {
 };

Это фрагмент кода из определения класса. Как вы можете видеть, 3 аргумента - это int и 2 строки. Я знаю, как передать их в порядке, но это инструктор инструктора инструктора, на который я застрял.

Класс инструктора содержит информацию каждого человека, хранящуюся на карте с ключом int. Файл, который я читаю из сборки курса, использует int, чтобы связать курс с инструктором. Я решил, что буду использовать int и заглянуть в карту инструктора, чтобы вытащить правильное имя человека, но я продолжаю получать неопределенные функциональные ошибки.

Пример из файла:

0,0,Science,Dept
the first 0 s the course ID number and the second is the instructor ID number.

Изменение: другой метод выглядит как тот же тип вызова

код из рассматриваемого метода

224             string myText(line);
225             istringstream iss(myText);
226             if (!(iss>>id)) id = 0;
227             iss.ignore(1,',');
228             if (!(iss>>id2)) id2 = 0;
229             cout<<"id: "<<id<<" id2: "<<id2<<endl;
230             Enrollment newEnrollment(Course::courseList[id], Student::studentList[id2]);

Объявление конструктора:

 87         Enrollment(Student student,Course course):student(student),course(course){}

ошибка:

: В статической функции-члене 'static int Зачисление :: loadEnrollment()

230: ошибка: нет соответствующей функции для звонка в "Регистрация": регистрация (курс и "студент")

81: ошибка: кандидаты: Зачисление :: Зачисление (const Enrollment &)

88: ошибка: регистрация :: регистрация()

87: ошибка: Регистрация :: Регистрация (Студент, курс)

  • 0
    Какой вывод у компилятора?
  • 0
    project1.cc: В статической функции-члене `static int Course :: loadCourses () ': project1.cc:189: ошибка: нет совпадения для' operator [] 'в' instructor [id2] '
Показать ещё 7 комментариев
Теги:
class
map

1 ответ

0
Лучший ответ

Вы пытаетесь получить доступ к operator[] для переменной с именем instructor. Эта переменная не имеет этого оператора. Это то, что дает вам ошибку компиляции.

Загруженные инструкторы находятся в переменной Instructor::instructorList, как показано в коде, который загружает инструкторов из файла.

Чтобы устранить эту ошибку, вы должны изменить строку, содержащую instructor[id2] чтобы использовать список:

Course newCourse(id,Instructor::instructorList[id2],name,dept);
  • 0
    хорошо, сладкий У меня есть цикл, который распечатывает содержимое карт, поэтому я запустите его, чтобы проверить и посмотреть, все ли загружено правильно. Я сообщу в ближайшее время.
  • 0
    Кажется, все работает так, как я хочу. Спасибо!!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню