0

I also have a question about how to make a copy constructor between the two classes.

> person(const person& a) : name(a.getName()), address(a.getAddress()),
> schoolname(a.getSchoolname()), ssn(a.getSsn()),
> idnumber(a.getIdnumber())
>         {
> 
>         }
> 
>         person& operator =(const person& b);

that is my constructor attempt? did I fail miserably?

Thank You!

Header

#ifndef person_h
#define person_h

#include <string>
using namespace std;

    class person
    {


    public:
        person();
        person(const person& a) : name(a.getName()), address(a.getAddress()), schoolname(a.getSchoolname()), ssn(a.getSsn()), idnumber(a.getIdnumber())
        {

        }

        person& operator =(const person& b);

        person(string theName, string theAddress, string theSchoolname, string theSsn, double theIdnumber);
        string getName() const;
        void setName(string newName);
        string getSchoolname()const;
        void setSchoolname(string newSchoolname);
        string getAddress() const;
        void setAddress(string newAddress);
        string getSsn() const;
        void setSsn(string newSsn);
        double getIdnumber()const;
        void setIdnumber(double newIdnumber);
        ~person();
    protected:
        string name;
        string address;
        string schoolname;
        string ssn;
        double idnumber;
    };

impliment

#include "person.h"
#include <string>
#include <iostream>
using std::string;
using std::cout;


    person::person() : name("no name yet"), address("no address yet"), schoolname("no school name"), ssn("no number") , idnumber(0)
    {

    }



    person :: person(string theName, string theAddress, string theSchoolname, string theSsn, double theIdnumber): name(theName), address(theAddress), schoolname(theSchoolname), ssn(theSsn), idnumber(0)
    {

    }





    string person :: getName() const
    {
        return name;

    }
    string person :: getAddress() const
    {
        return address;
    }
    string person :: getSchoolname() const
    {
        return schoolname;

    }

    string person ::getSsn()const
    {
        return ssn;
    }

    double person :: getIdnumber() const
    {
        return idnumber;
    }

    void person :: setName(string newName)
    {
        name = newName;

    }
    void person :: setAddress(string newAddress)
    {
        address = newAddress;
    }
    void person :: setSchoolname( string newSchoolname)
    {
        schoolname = newSchoolname;

    }

    void person ::setSsn(string newSsn)
    {
        ssn =  newSsn;
    }

    void person ::setIdnumber( double newIdnumber)
    {
        idnumber = newIdnumber;
    }

Derived Class Header

#ifndef student_h
#define student_h

#include "person.h"
#include <string>

class student : public person
{
public:
    student();
    student(student const& s);

    student( double theStudentid, string theGpa, string theCounselor, string theMajor, string theGraduatingclass );

    double getStudentid() const;
    void setStudentid(double newStudentid);

    string getGpa()const;
    void setGpa(string newGpa);

    string getCounselor() const;
    void setCounselor(string newCounselor);

    string getMajor() const;
    void setMajor(string newMajor);

    string getGraduatingclass() const;
    void setGraduatingclass(string newGraduatingclass);

    void readClasses();
    void printTranscript();
    void addClass(string , string , string );

protected: 
    double studentid;
    string gpa;
    string counselor; 
    string major;
    string graduatingclass;
    string classes[40];
    string transcript[40];
    string Class[100];
    char array[100];
    int counter;
};

#endif

Impliment

#include "student.h"
#include <string>
using namespace std;



    student::student() : gpa("none"), counselor("none"), major("none"), graduatingclass("none"), studentid(0)
    {

    }

    student :: student ( double theStudentid, string theGpa, string theCounselor, string theMajor, string theGraduatingclass):  studentid(0), gpa(theGpa), counselor(theCounselor), major(theMajor), graduatingclass(theGraduatingclass)
    {

    }


    double student :: getStudentid() const
    {
        return studentid;
    }
    string student :: getGpa() const
    {
        return gpa;
    }
    string student :: getCounselor() const
    {
        return counselor;
    }
    string student :: getMajor() const
    {
        return major;
    }
    string student :: getGraduatingclass() const
    {
        return graduatingclass;

    }

    void student :: setStudentid(double newStudentid)
    {
        studentid = newStudentid;
    }

    void student :: setGpa(string newGpa)
    {
        gpa = newGpa;
    }
    void student :: setCounselor(string newCounselor)
    {
        counselor = newCounselor;
    }

    void student :: setMajor(string newMajor)
    {
        major = newMajor;

    }


    void student :: setGraduatingclass(string newGraduatingclass)
    {
        graduatingclass = newGraduatingclass;
    }

Main.cpp

Sdsd Sdsd
  • 23
  • 2
  • What is the compiler telling you? – Michael Petrotta Aug 15 '11 at 02:49
  • Xcode is an Integrated Development Environment (IDE), not a compiler. The compiler is separate from the IDE. Even if Xcode doesn't report any errors, the compiler has the final say on whether your program compiles or not. So you need to copy-and-paste the *compiler* error(s), not Xcode errors, into your question. Also, do you have [a good introductory C++ book](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) on hand? Such a book will cover this topic and much more. – In silico Aug 15 '11 at 02:49
  • When you compile, what happens? If compilation fails, there should be error messages somewhere, which would be critical in solving this. – Ken Wayne VanderLinde Aug 15 '11 at 02:50
  • @Sdsd Sdsd: There has to be more than just "Build Failed". We're looking for errors reported by *the compiler*, not errors reported by Xcode. The compiler error(s) will tell you what's wrong. If the build failed, then the compiler will have to output error messages. – In silico Aug 15 '11 at 02:53
  • @In silico Undefined symbols for architecture x86_64: "person::~person()", referenced from: student::~student() in main.o student::student() in student.o student::student(double, std::string, std::string, std::string, std::string) in student.o – Sdsd Sdsd Aug 15 '11 at 02:55
  • @Sdsd Sdsd: Yes, that would be a compiler error (actually it's a linker error, but it helps). On Stack Overflow you would edit your question to include the errors by copying-and-pasting the exact compiler error into it. – In silico Aug 15 '11 at 02:57

1 Answers1

1

Undefined symbols for architecture x86_64: "person::~person()", referenced from: student::~student() in main.o student::student() in student.o student::student(double, std::string, std::string, std::string, std::string) in student.o

According to the linker error, you're missing a definition of person::~person(), the person's destructor. In your class declaration header file, you have:

class person
{
public:
    // ...
    person();
    ~person();
    // ...
};

But in your implementation file, you have:

// ...
person::person() {}
// Where's person::~person() {} ?
// ...

Add a definition of person::~person() and it should resolve the above error, at least.

In silico
  • 51,091
  • 10
  • 150
  • 143
  • @Sdsd Sdsd: Make sure to accept the answer if it has helped you by clicking the thing that looks like a check mark. For future reference, when asking a question on Stack Overflow you should always include all compiler errors in your question. It will help us provide quicker answers. – In silico Aug 15 '11 at 03:04
  • Thanks for the heads up! I am pretty sure I hit the check – Sdsd Sdsd Aug 15 '11 at 03:07