2015-09-22 5 views
0

пытается сделать это назначение колледжа с множественным наследованием. Вот класс Student, который предполагается использовать MI:Получить ошибки при множественном наследовании C++

#include "Person.h" 
#include "Studying.h" 
#include "StudentRoll.h" 

class Student : public Person, public Studying { 
    private: 
    int mathScore; 
public: 
    Student(string n,int b,int i,int c,double a):Person(n,b),Studying(i,c,a){} 
    string toString(); 
    friend class StudentRoll; 
}; 

А вот его предки:

#include <string> 

using namespace std; 

class Person { 
private: 
    string name; 
    int birthYear; 
public: 
    Person() :name(""), birthYear(1900){} 
    Person(string n, int y); 
    void setBirthYear(int y); 
    string toString(); 
}; 


using namespace std; 

class Studying { 
private: 
    int id; 
    int course; 
    double average; 
public: 
    Studying():id(0),course(1),average(3.0){} 
    Studying(int i, int c, double a):id(i),course(c),average(a){} 
    void setCourse(int c); 
    string toString(); 
    }; 

Я получаю некоторые странные ошибки с следующим классом

#pragma once 
#include "Student.h" 
#include <vector> 
#include <iostream> 

using namespace std; 

class StudentRoll { 
private: 
    vector<Student> students; 
public: 
    void push(Student s); 
    void pop(); 
    void show(); 

}; 

И вот ошибки:

Код серьезности Описание Строка файла проекта Ошибка C2923 'std :: vector': 'Student' не является допустимым аргументом типа шаблона для параметра '_Ty' lab3 i: \ onedrive \ uni \ oop \ lab3 \ lab3 \ studentroll.h 10

Код серьезности Описание Строка файла проекта Ошибка C3867 'std :: vector> :: size': нестандартный синтаксис; использование '&', чтобы создать указатель на lab3 членов я: \ onedrive \ уни \ уп \ lab3 \ lab3 \ studentroll.cpp 17

Тяжесть Code Line Описание проекта Файл Ошибка C2065 'Student': необъявленная lab3 идентификатор я: \ onedrive \ уни \ уп \ lab3 \ lab3 \ studentroll.h 10

Тяжесть Code Line Описание проекта Файл Ошибка C2248 'Student :: mathScore': не может получить доступ к закрытому члену, объявленный в классе lab3 'Студенческая' я: \ onedrive \ uni \ oop \ lab3 \ lab3 \ studentroll.cpp 22

Код серьезности Описание Файл файла проекта Ошибка синтаксиса C2061: идентификатор 'S tudent 'lab3 i: \ onedrive \ uni \ oop \ lab3 \ lab3 \ studentroll.h 12

Я могу включить cpps в случае необходимости. Пожалуйста, помогите

+4

У вас есть круговая зависимость между 'Student.h' и' StudentRoll.h'. См. Http://stackoverflow.com/questions/625799/resolve-circular-dependencies-in-c. –

+5

Обратите внимание: вы никогда не должны ставить 'использование пространства имен std;' в заголовок. –

+2

Некоторые советы: начните с удаления всех 'using namespace std;', прочитайте о том, почему [здесь] (http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice) , Вы также можете прочитать о включении охранников [здесь] (http://stackoverflow.com/questions/8020113/c-include-guards). – sweerpotato

ответ

Смежные вопросы