Проблемы наследования C ++ - PullRequest
1 голос
/ 19 февраля 2012

У меня проблемы с наследованием.У меня есть класс Person и класс Student: Person, Employee: Person.Ошибки, которые я получаю, сбивают меня с толку - я не понимаю, почему я их получаю.Я использовал крошечную вставку для вставки кода, так как думал, что здесь будет слишком много места.Если я должен задать вопрос в другом месте, дайте мне знать.Спасибо.

Файлы кодов:

Вот ошибки, которые я получаю:

1>------ Build started: Project: PR4_Students, Configuration: Debug Win32 ------
1>Build started 2/18/2012 11:14:27 PM.
1>InitializeBuildStatus:
1>  Touching "Debug\PR4_Students.unsuccessfulbuild".
1>ClCompile:
1>  main.cpp
1>\\cs1\cs_students\mlindahl15\cs273\pr4_students\student.h(15): error C2969: syntax error : ';' : expected member function definition to end with '}'
1>\\cs1\cs_students\mlindahl15\cs273\pr4_students\student.h(16): error C2059: syntax error : 'inline function header'
1>\\cs1\cs_students\mlindahl15\cs273\pr4_students\student.h(16): error C2630: ';' found in what should be a comma-separated list
1>\\cs1\cs_students\mlindahl15\cs273\pr4_students\employee.h(15): error C2969: syntax error : ';' : expected member function definition to end with '}'
1>\\cs1\cs_students\mlindahl15\cs273\pr4_students\employee.h(16): error C2059: syntax error : 'inline function header'
1>\\cs1\cs_students\mlindahl15\cs273\pr4_students\employee.h(16): error C2630: ';' found in what should be a comma-separated list
1>  Student.cpp
1>\\cs1\cs_students\mlindahl15\cs273\pr4_students\student.h(15): error C2969: syntax error : ';' : expected member function definition to end with '}'
1>\\cs1\cs_students\mlindahl15\cs273\pr4_students\student.h(16): error C2059: syntax error : 'inline function header'
1>\\cs1\cs_students\mlindahl15\cs273\pr4_students\student.h(16): error C2630: ';' found in what should be a comma-separated list
1>\\cs1\cs_students\mlindahl15\cs273\pr4_students\student.cpp(8): error C2084: function 'Student::Student(void)' already has a body
1>          \\cs1\cs_students\mlindahl15\cs273\pr4_students\student.h(15) : see previous definition of '{ctor}'
1>  Employee.cpp
1>\\cs1\cs_students\mlindahl15\cs273\pr4_students\employee.h(15): error C2969: syntax error : ';' : expected member function definition to end with '}'
1>\\cs1\cs_students\mlindahl15\cs273\pr4_students\employee.h(16): error C2059: syntax error : 'inline function header'
1>\\cs1\cs_students\mlindahl15\cs273\pr4_students\employee.h(16): error C2630: ';' found in what should be a comma-separated list
1>\\cs1\cs_students\mlindahl15\cs273\pr4_students\employee.cpp(8): error C2084: function 'Employee::Employee(void)' already has a body
1>          \\cs1\cs_students\mlindahl15\cs273\pr4_students\employee.h(15) : see previous definition of '{ctor}'
1>  Generating Code...
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:05.64
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Ответы [ 2 ]

4 голосов
/ 19 февраля 2012

Я не анализировал весь код, но вы, похоже, не понимаете, как объявлять вызовы конструктору базового класса;

class Student : public Person
{
...
    Student() : Person();
...
};

Вызов конструктору базового класса должен быть выполнен на фактическом реализация конструктора только.Поскольку вы уже делаете это с

Student::Student() : Person() {

, вы можете просто изменить объявление на

class Student : public Person
{
...
    Student();
...
};

, и все должно получиться лучше.

Редактировать: Добавлениеответ на следующий вопрос ниже:

Линия

Employee(string department, string jobTitle, int yearOfHire) 
  : Person(name, socialSecurityNumber, age, gender, address, phoneNumber) {

не имеет смысла по той же причине.Если вы хотите иметь возможность построить Employee со всеми этими параметрами, вам нужно вместо этого объявить конструктор как

Employee(string department, string jobTitle, int yearOfHire, name, 
         socialSecurityNumber, age, gender, address, phoneNumber) {

и реализовать его как

Employee::Employee(string department, string jobTitle, int yearOfHire, name, 
         socialSecurityNumber, age, gender, address, phoneNumber) 
  : Person(name, socialSecurityNumber, age, gender, address, phoneNumber) {

, передав таким образомПараметры для конструктора базового класса.

4 голосов
/ 19 февраля 2012

В строке 15 Students.h:

Student() : Person();

Это недопустимо.Либо вам нужно полностью определить конструктор там, либо его нет совсем.

Итак:

Student() : Person() { some code; };

или:

Student();

и поместить фактический код в вашфайл реализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...