Ошибка компиляции: 2 перегрузки не имеют законного преобразования для указателя 'this'.Работа со структурами - PullRequest
0 голосов
/ 13 апреля 2019

Мое задание по программированию требует, чтобы я определил структуру Student с именем вектора и структуру Course с именем и вектором, содержащую зарегистрированных студентов и следующие функции:

void print_student(Student* s)
void print_course(Course* c)
void enroll(Student* s, Course* c)
//enrolls given student in the given course and updates both vectors

Я попытался добавить амперсанды в параметрах функции регистрации, чтобы исправить это, но это не сработало.

#include <iostream>
#include <string>
#include <vector>

using namespace std;

struct Student 
{
    string Name ;
    vector < Course* > Courses;
};

struct Course 
{
    string Name ;
    vector < Student* > Students;
};

void print_Student(Student* s)
{
    cout << s->Name << endl;
    for (int i = 0; i < s->Courses.size(); i++)
    {
        cout << s->Courses[i] << endl;
    }
};

void print_course(Course* c)
{
    cout << c->Name << endl;

    for (int i = 0; i < c->Students.size(); i++)
    {
        cout << c->Students[i] << endl;
    }
};

void enroll(Student* &s, Course* &c)
{
    cout << "Enrolled " << s << "in " << c << endl;
    s->Courses.push_back( c ); 
    c->Students.push_back( s);
}


int main()
{
    Student* Bob;
    Course* ComputerScience;

    Bob->Name = "Bob";

    ComputerScience->Name = "Computer Science";

    enroll( Bob , ComputerScience);

    system("Pause");
}

Я ожидал, что код зачислит студента Боба на курс информатики, чтобы позже я смог определить больше студентов и распечатать их.

Код кажется хорошим, но при запуске компилятор выдает мне следующие ошибки:

source.cpp(10): error C2065: 'Course': undeclared identifier
source.cpp(10): error C2059: syntax error: '>'
source.cpp(10): error C2976: 'std::vector': too few template arguments
source.cpp(41): error C2663: 'std::vector<_Ty,_Alloc>::push_back': 2 overloads have no legal conversion for 'this' pointer

Я не понимаю, что происходит, и как я могу это исправить?

1 Ответ

0 голосов
/ 13 апреля 2019

Когда вы компилируете код, компилятор начинает компилировать struct Student перед компиляцией struct Course.Следовательно, во время компиляции Student, компилятор не знает, что такое курс.Поэтому ошибка, необъявленный идентификатор.Чтобы это исправить, напишите в объявлении struct Course вот так:

struct Course;
struct Student 
 {
   string Name ;
   vector < Course* > Courses;
 };


struct Course 
 {
   string Name ;
   vector < Student* > Students;
 };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...