michaellindahl
michaellindahl

Reputation: 2052

C++ Inheritance Issues

I am having some issues regarding inheritance. I have a class of Person, and a class of Student:Person, Employee:Person. The errors that I am getting baffle me – I do not understand why I am getting them. I used tiny paste to paste the code as I thought it would take too much space up here. If I should post question elsewhere, let me know. Thanks.

Code Files:

Here are the errors that I am getting:

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 ==========

Upvotes: 1

Views: 1574

Answers (2)

Joachim Isaksson
Joachim Isaksson

Reputation: 181077

I didn't analyze the whole code, but you seem to be confused how to declare calls to the base class constructor;

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

The call to the base class constructor should be done on the actual implementation of the constructor only. Since you already do that with

Student::Student() : Person() {

you can just change the declaration to

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

and things should turn out better.

Edit: Adding the answer to a follow-up question below;

The line

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

does for the same reason not really make sense. If you want to be able to construct an Employee with all those parameters, you need to instead declare the constructor as;

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

and implement it as

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

thus passing on the parameters to the base class constructor.

Upvotes: 4

Mat
Mat

Reputation: 206859

At line 15 of Students.h:

Student() : Person();

That's invalid. Either you need to completely define the constructor there, or not at all.

So:

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

or:

Student();

and put the actual code in your implementation file.

Upvotes: 4

Related Questions