0

these are the errors that i'm getting
i dont' know whats wrong because most of it is given by the instructor
any help with these errors will be greatly appreciated

c:\documents and settings\compaq_owner\my documents\visual studio 2005\projects\book.cpp(12) : error C2236: unexpected 'class' 'Queue'. Did you forget a ';'?
c:\documents and settings\compaq_owner\my documents\visual studio 2005\projects\book.cpp(12) : error C2143: syntax error : missing ';' before '{'
c:\documents and settings\compaq_owner\my documents\visual studio 2005\projects\book.cpp(12) : error C2447: '{' : missing function header (old-style formal list?)
c:\documents and settings\compaq_owner\my documents\visual studio 2005\projects\book.cpp(62) : error C2504: 'Personnel' : base class undefined
c:\documents and settings\compaq_owner\my documents\visual studio 2005\projects\book.cpp(64) : error C2143: syntax error : missing ';' before '*'
c:\documents and settings\compaq_owner\my documents\visual studio 2005\projects\book.cpp(64) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\documents and settings\compaq_owner\my documents\visual studio 2005\projects\book.cpp(64) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\documents and settings\compaq_owner\my documents\visual studio 2005\projects\book.cpp(68) : error C2236: unexpected 'class' 'Contact'. Did you forget a ';'?
c:\documents and settings\compaq_owner\my documents\visual studio 2005\projects\book.cpp(68) : error C2143: syntax error : missing ';' before '{'
c:\documents and settings\compaq_owner\my documents\visual studio 2005\projects\book.cpp(68) : error C2447: '{' : missing function header (old-style formal list?)
c:\documents and settings\compaq_owner\my documents\visual studio 2005\projects\book.cpp(94) : error C2143: syntax error : missing ';' before '*'
c:\documents and settings\compaq_owner\my documents\visual studio 2005\projects\book.cpp(94) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\documents and settings\compaq_owner\my documents\visual studio 2005\projects\book.cpp(94) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\documents and settings\compaq_owner\my documents\visual studio 2005\projects\book.cpp(102) : error C2143: syntax error : missing ';' before '*'
c:\documents and settings\compaq_owner\my documents\visual studio 2005\projects\book.cpp(102) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\documents and settings\compaq_owner\my documents\visual studio 2005\projects\book.cpp(102) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\documents and settings\compaq_owner\my documents\visual studio 2005\projects\book.cpp(102) : warning C4183: 'getContact': missing return type; assumed to be a member function returning 'int'
c:\documents and settings\compaq_owner\my documents\visual studio 2005\projects\book.cpp(102) : error C2065: 'pContact' : undeclared identifier
c:\documents and settings\compaq_owner\my documents\visual studio 2005\projects\book.cpp(108) : error C2227: left of '->getAddress' must point to class/struct/union/generic type
        type is ''unknown-type''
c:\documents and settings\compaq_owner\my documents\visual studio 2005\projects\book.cpp(109) : error C2227: left of '->getPhone' must point to class/struct/union/generic type
        type is ''unknown-type''
c:\documents and settings\compaq_owner\my documents\visual studio 2005\projects\book.cpp(110) : error C2227: left of '->getEmail' must point to class/struct/union/generic type
        type is ''unknown-type''
c:\documents and settings\compaq_owner\my documents\visual studio 2005\projects\book.cpp(119) : error C2061: syntax error : identifier 'Contact'
c:\documents and settings\compaq_owner\my documents\visual studio 2005\projects\book.cpp(123) : error C2541: 'delete' : cannot delete objects that are not pointers
c:\documents and settings\compaq_owner\my documents\visual studio 2005\projects\book.cpp(159) : error C2541: 'delete' : cannot delete objects that are not pointers
c:\documents and settings\compaq_owner\my documents\visual studio 2005\projects\book.cpp(185) : error C2541: 'delete' : cannot delete objects that are not pointers
c:\documents and settings\compaq_owner\my documents\visual studio 2005\projects\book.cpp(237) : error C2541: 'delete' : cannot delete objects that are not pointers

Code:

#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
using namespace std;
class Contact {
private:    
        char cAddress[75];
        char cPhone[25];
        char cEmail[75];
public:
        void setAddress(char *cAddress) {strcpy(this->cAddress, cAddress);} 
        void setPhone(char *cPhone) { strcpy(this->cPhone, cPhone); }
        void setEmail(char *cEmail) { strcpy(this->cEmail, cEmail); }
        char* getAddress() { return cAddress; }
        char* getPhone() { return cPhone; }
        char* getEmail() { return cEmail; }

        Contact(char *cAddress, char *cPhone, char *cEmail) { // constructor
            setAddress(cAddress);
            setPhone(cPhone);
            setEmail(cEmail);
        }
};

class Personnel {
    private:
        char cName[50];
        int iId;
        char cBirthday[11];
    protected:
        Contact *pContact;
    public: 
        void setName(char *cName) { strcpy(this->cName, cName); }
        void setBirthday(char *cBirthday) {strcpy(this->cBirthday, cBirthday);}
        void setId(int iId) { this->iId = iId; }
        char* getName() { return cName; }
        int getId() { return iId;}
        char* getBirthday() { return cBirthday; }
        Contact * getContact() { return pContact; }
        virtual void display() {
            cout << "PERSONNEL" << endl;        
            cout << "Name:\t" << getName() << endl;
            cout << "Id:\t" << getId() << endl;
            cout << "Birthday:\t" << getBirthday() << endl;
            cout << "Address:\t" << pContact->getAddress() << endl;
            cout << "Phone:\t" << pContact->getPhone() << endl;
            cout << "Email:\t" << pContact->getEmail() << endl;
        }

        Personnel(char *cName, char *cBirthday, char *cAddress, char *cPhone, char *cEmail) {                   // constructor
            static int iIdCounter = 0;
            setName(cName);     // set Name
            setId(iIdCounter);  // set Id by a self-incremental counter
            iIdCounter++;       // increment the ID generator;
            setBirthday(cBirthday); // set Birthday
            pContact = new Contact(cAddress, cPhone, cEmail);
        }

        virtual ~Personnel() {              // destructor
            delete pContact;        // delete the object linked to pContact
            pContact = NULL;        // Make sure pContact not point to an object
        }                           
};

class Employee : public Personnel    {  // inherit from Personnel
    private:
        char cDepartment[75];
        float fSalary;
        char cRank[75];

    public:
        void setDepartment(char *cDepartment) {strcpy(this->cDepartment, cDepartment);}
        void setSalary(float fSalary) { this->fSalary = fSalary; }
        virtual void setRank(char *cRank) { strcpy(this->cRank, cRank); }
        char* getDepartment() { return cDepartment; }
        float getSalary() { return fSalary; }
        virtual char* getRank() { return cRank; }

        void display() {
            Personnel::display();
            cout << "EMPLOYEE" << endl; 
            cout << "Department:\t" << getDepartment() << endl;
            cout << "Salary:\t" << getSalary() << endl;
            cout << "Rank:\t" << getRank() << endl;
        }

        Employee(char *cName, char *cBirthday, char *cAddress, char *cPhone, char *cEmail, char *cDepartment, float fSalary, char *cRank) 
            : Personnel(cName, cBirthday, cAddress, cPhone, cEmail) 
        {
            setDepartment(cDepartment);
            setSalary(fSalary);
            setRank(cRank);
        }

        virtual ~Employee() {               // destructor
            delete pContact;        // delete the object linked to pContact
            pContact = NULL;        // Make sure pContact does not point to 
        }                       // any object
};

class Faculty : public Employee {   // inherit from Employee
    private:    
        char cResearch[75];
    public:
        virtual void setResearch(char *cResearch) {
            strcpy(this->cResearch, cResearch);
        }
        char* getResearch() { return cResearch; }
        virtual void display() {
            Employee::display();
            cout << "FACULTY" << endl;
            cout << "Research\t" << getResearch() << endl;
        }

        Faculty(char *cName, char *cBirthday, char *cAddress, char *cPhone, char *cEmail, char *cDepartment, float fSalary, char *cRank, char *cResearch) 
            : Employee(cName, cBirthday, cAddress, cPhone, cEmail, cDepartment, fSalary, cRank)
        {
            setResearch(cResearch);
        }

        virtual ~Faculty() {                // destructor
            delete pContact;        // delete the object linked to pContact
            pContact = NULL;        // Make sure pContact does not
        }                       // point to any object
};

class ConsultingCo {                // not inherit from a class
private:
    char division[30];
    float wage;
public:
    virtual void display(){
        cout << "ConsultingCo" << endl;
        cout << "Division: " << getDivision() << endl;
        cout << "Wage: " << getWage() << endl;
    }
    char* getDivision(){
        return division;
    }
    void setDivision(char *division_){
        strcpy(this->division, division_);
    }
    float getWage(){
        return wage;
    }
    void setWage(float wage_){
        this->wage = wage_;
    }
    ConsultingCo(char *division_, float wage_) {
        setDivision(division_);
        setWage(wage_);
    }
};

// multiple inheritance: Consultant class inherit from two classes
class Consultant : public Employee, public ConsultingCo{
private:
    int hours;
public:
    virtual void display() {
        Employee::display();
        ConsultingCo::display();
        cout << "Consultant" << endl;
        cout << "Hours: " << getHours() << endl;
    }
    int getHours(){ return hours;}
    void setHours(int hours_) {this->hours = hours_;}
    Consultant(char *cName, char *cBirthday, char *cAddress, char *cPhone, char *cEmail, char *cDepartment, float fSalary, char *cRank, char* division_, float wage_, int hours_) 
            : Employee(cName, cBirthday, cAddress, cPhone, cEmail, cDepartment, fSalary, cRank), ConsultingCo(division_, wage_)
    {
        setHours(hours_);
    }
        virtual ~Consultant() {         // destructor
            delete pContact;        // delete the object linked to pContact
            pContact = NULL;        // Make sure pContact does not point to 
        }                       // any object
};

class PersonnelNode {       // This is a container class
    private:
        Personnel       *pNode; // It contains a Personnel class
        PersonnelNode   *pNext; // pointer used to form a linked list
    public:
        void setNode(Personnel *pNode) { this->pNode = pNode; }
        void setNext(PersonnelNode *pNext) { this->pNext = pNext; }
        Personnel* getNode() { return pNode; }
        PersonnelNode* getNext() { return pNext; }

        PersonnelNode() {       // constructor
            pNode = NULL;
            pNext = NULL;
        }
} *head = NULL; // declare a global pointer variable head

// Forward declaration of global functions outside any class
int main();             // The main function
void menu();            // display main choices
void branching(char);   // branch to the chosen function
void sub_menu();            // display different insertion options
void insert();          // call sub_menu() and branch to chosen function
int insert_personnel(); // insert a personnel node
int insert_employee();  // insert an employee node
int insert_faculty();   // insert a faculty node
int insert_consultant();
void remove();          // call remove function
void display_all();     // display members in all nodes in the linked list
void display_node(Personnel*, int); // display the members in one node

int main() {    // main function is the entry point of the program
    char ch;
    cout << "!!CLASSES INHERITANCE, HIERARCHY AND POLYMORPHISM" << endl;
    cout << "***********************************************" << endl;

    do {
         menu();                // display choices
         cin >> ch;         // enter a choice from the keyboard
         ch = tolower(ch);  // convert to lower case
         branching(ch);     // branch to the chosen function
    }
    while (ch != 'q');          // 'q' for quit
    return 0;
}

void menu() {
    cout <<   endl << endl << "MENU" << endl;
    cout << "----" << endl;
    cout << "i: Insert a new entry." << endl;
    cout << "d: display all entries." << endl;
    cout << "r: remove an entry." << endl;
    cout << "q: Quit the program." << endl;
    cout << endl << "Please enter your choice (i, d, r, or q) --> ";
}

void branching(char c) {        // branch to chosen function
     switch(c) {
        case 'i':   insert();
                break;
        case 'd':   display_all();
                break;
        case 'r':   remove();
                break;
        case 'q':   cout << endl << "@Exiting the program..............." << endl;
                cin.get();  //type any key.
                break;
        default:    cout << endl << "@ERROR - Invalid input." << endl;
                cout << "@Try again....." << endl;
     }
}

void sub_menu() {   // display insertion options
    cout <<   endl << endl << "INSERTION SUB-MENU" << endl;
    cout << "------------------" << endl;
    cout << "p: insert a personnel entry." << endl;
    cout << "e: insert an employee entry." << endl;
    cout << "f: insert a faculty entry." << endl;
    cout << "c: insert a consultant entry." << endl;
    cout << "q: Quit insertion and back to main menu." << endl;
    cout << endl << "Please enter your choice (p, e, f, c, or q) --> ";
}

// insert() is the umbrella insertion function that calls different insertion
// functions according to the selection in the sub-menu.
void insert() {
    char ch;

    cout << endl << "@Insertion module...............";
    do {
         sub_menu();
         cin >> ch;
         ch = tolower(ch);

         switch(ch) {
            case 'p':   if(insert_personnel() != 0)
                            cout << "@INSERTION OPERATION FAILED." << endl;
                        else
                            cout << "@INSERTED SUCCESSFULLY." << endl;
                            break;
            case 'e':   if(insert_employee() != 0)
                            cout << "@INSERTION OPERATION FAILED." << endl;
                        else
                            cout << "@INSERTED SUCCESSFULLY." << endl;
                            break;
            case 'f':   if(insert_faculty() != 0)
                            cout << "@INSERTION OPERATION FAILED." << endl;
                        else
                            cout << "@INSERTED SUCCESSFULLY." << endl;
                            break;
            case 'c':   if(insert_consultant() != 0)
                            cout << "@INSERTION OPERATION FAILED." << endl;
                        else
                            cout << "@INSERTED SUCCESSFULLY." << endl;
                            break;
            case 'q':   cout << endl << "@Exiting the insertion..." << endl;
                        cin.get();
                        break;
            default:        cout << endl << "@ERROR - Invalid input." << endl;
                        cout << "@Try again....." << endl;
        }
    } 
    while (ch != 'q');
}

int insert_personnel() {        // insert a Personnel node
    Personnel *person = NULL;
    PersonnelNode *node = NULL;
    char name[50], birthday[11], address[75], phone[25], email[75];
    cout << endl << "@Inserting personnel node.........." << endl;
    cout << "Enter the name: ";
    cin.ignore();   // fflush()
    cin.getline(name, 50);
    cout << "Enter the birthday, e.g., 05/24/1985: ";
    cin.getline(birthday, 11);
    cout << "Enter the address: ";
    cin.getline(address, 75);
    cout << "Enter the phone number: ";
    cin.getline(phone, 25);
    cout << "Enter the email: ";
    cin.getline(email, 75);
    person = new Personnel(name, birthday, address, phone, email);
    node = new PersonnelNode();

    if((person != NULL) && (node != NULL)) {
        node->setNode(person);
        node->setNext(head);
        head = node;
        return 0;
    }
    else {
        cout << endl << "@ERROR - Could not allocate enough memory!" << endl;
        return -1;
    }
}

int insert_employee() {     // insert an Employee node
    Personnel *person = NULL;
    PersonnelNode *node = NULL;
    char name[50], birthday[11], address[75], phone[25], email[75], department[75], rank[75];
    float salary;

    cout << endl << "@Inserting employee node.........." << endl;
    cout << "Enter the name: ";
    cin.ignore();
    cin.getline(name, 50);
    cout << "Enter the birthday, e.g., 05/24/1985: ";
    cin.getline(birthday, 11);
    cout << "Enter the address:";
    cin.getline(address, 75);
    cout << "Enter the phone number: ";
    cin.getline(phone, 25);
    cout << "Enter the email: ";
    cin.getline(email, 75);
    cout << "Enter the department: ";
    cin.getline(department, 75);
    cout << "Enter the salary. It must be a float number: ";
    cin >> salary;
    cout << "Enter the rank: ";
    cin.ignore();
    cin.getline(rank, 75);

    person = new Employee(name, birthday, address, phone, email, department, salary, rank);
    node = new PersonnelNode();

    if((person != NULL) && (node != NULL)) {
        node->setNode(person);
        node->setNext(head);
        head = node;
        return 0;
    }
    else {
        cout << endl << "@ERROR - Could not allocate enough memory!" << endl;
        return -1;
    }
}

int insert_faculty() {      // insert a Faculty node
    Personnel *person = NULL;
    PersonnelNode *node = NULL;
    char name[50], birthday[11], address[75], phone[25], email[75], department[75], rank[75], research[75];
    float salary;

    cout << endl << "@Inserting faculty node.........." << endl;
    cout << "Enter the name: ";
    cin.ignore();
    cin.getline(name, 50);
    cout << "Enter the birthday, e.g., 05/24/1985: ";
    cin.getline(birthday, 11);
    cout << "Enter the address: ";
    cin.getline(address, 75);
    cout << "Enter the phone number: ";
    cin.getline(phone, 25);
    cout << "Enter the email: ";
    cin.getline(email, 75);
    cout << "Enter the department: ";
    cin.getline(department, 75);
    cout << "Enter the salary. It must be a float number: ";
    cin >> salary;
    cout << "Enter the rank: ";
    cin.ignore();
    cin.getline(rank, 75);

    cout << "Enter the research: ";
    cin.getline(research, 75);

    person = new Faculty(name, birthday, address, phone, email, department, salary, rank, research);
    node = new PersonnelNode();
    if((person != NULL) && (node != NULL)) {
        node->setNode(person);
        node->setNext(head);
        head = node;
        return 0;
    }
    else {
        cout << endl << "@ERROR - Could not allocate enough memory!" << endl;
        return -1;
    }
}
int insert_consultant() {       // insert a Faculty node
    Personnel *person = NULL;
    PersonnelNode *node = NULL;
    char name[50], birthday[11], address[75], phone[25], email[75], department[75], rank[75], division[30];
    float salary, wage;
    int hours;

    cout << endl << "@Inserting consultant node.........." << endl;
    cout << "Enter the name: ";
    cin.ignore();
    cin.getline(name, 50);
    cout << "Enter the birthday, e.g., 05/24/1985: ";
    cin.getline(birthday, 11);
    cout << "Enter the address: ";
    cin.getline(address, 75);
    cout << "Enter the phone number: ";
    cin.getline(phone, 25);
    cout << "Enter the email: ";
    cin.getline(email, 75);
    cout << "Enter the department: ";
    cin.getline(department, 75);

    cout << "Enter the salary. It must be a float number: ";
    cin >> salary;
    cout << "Enter the rank: ";
    cin.ignore();
    cin.getline(rank, 75);
    cout << "Enter the division: ";
    cin.getline(division, 30);
    cout << "Enter the wage. It must be a float number: ";
    cin >> wage;
    cout << "Enter the hours. It must be an integer: ";
    cin >> hours;

    person = new Consultant(name, birthday, address, phone, email, department, salary, rank, division, wage, hours);
    node = new PersonnelNode();
    if((person != NULL) && (node != NULL)) {
        node->setNode(person);
        node->setNext(head);
        head = node;
        return 0;
    }
    else {
        cout << endl << "@ERROR - Could not allocate enough memory!" << endl;
        return -1;
    }
}

/* void remove() function removes a node in the linked list. In the remove function, an id number will be entered as the key. The node whose id field stored an id number that is equal to the entered id number will be removed. */
void remove() {
     int id;
     PersonnelNode *temp, *prev;
     Personnel *person;
     int index = 1;
     cout<<"Remove module...............\n" << endl ;
     cout<<"Please enter the ID number of the person to be deleted: "<<endl;
     cin>> id; 
     temp = head;
     while (temp != NULL) {
         person = temp->getNode();
            if (id != person->getId()){
                prev = temp;
                temp = temp->getNext();
                index++;
            }
            else {
                cout <<"Person to delete is found at index" << index<<endl;
                display_node(person, index);
                if(temp != head)
                prev->setNext(temp->getNext());
                else
                    head = head->getNext();
                delete person;  // explicit garbage-collection
                person = NULL;  // Make person not to point to any object
                delete temp;        // explicit garbage-collection
                temp = NULL;        // Make temp not to point to any object
                return;
            }
        }
     cout <<"The person with ID = << id << does not exist."<< endl;
}

void display_all() {    // Display contents of all nodes in the linked list
    PersonnelNode *node;
    int node_count= 0;
    cout << endl << "@Display module...............";
    node = head;
    while(node != NULL) {
        display_node(node->getNode(), ++node_count);    
        node = node->getNext();
    }
    cout << endl << "@No more records." << endl;
}

void display_node(Personnel *node, int index) {// Display contents of node
    cout << endl << "Record " << index << "." << endl;
    node->display();// Polymorphic call. Depending on the object pointed to
}               // by node, a different display function will be invoked.

Edited by mike_2000_17: Fixed formatting

2
Contributors
1
Reply
2
Views
10 Years
Discussion Span
Last Post by Salem
This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.