Hey,
I am getting a runtime error when I run my removeSomeElement() function. Can someone have a look and tell me what I am doing wrong.
thanks a lot.
My Code is:
Code:
#include "Person.h"
class SetOfPersons{ //Unbounded Container
public:
SetOfPersons(int n = 4) : index(0),size(n){
buffer = new Person*[n]
;}
~SetOfPersons(void) {delete [] buffer;}
void add(Person & item) {
if(index == size) { //grow the container
cout << "growing\n";
Person ** temp = buffer;
buffer = new Person*[size*2];
for(int i=0; i<size; i++) buffer[i] = temp[i];
size = size *2;
delete [] *temp;
}
buffer[index++] = &item;
}
int sizea(){ return index;}
Person & removeSomeElement() {
index--;
if(index < size/2) { //shrink the container
return *buffer[++index];
cout << "shrinking\n";
Person ** temp = buffer;
buffer = new Person*[size/2];
for(int i=0; i<index; i++) buffer[i] = temp[i];
size = size/2;
delete [] *temp;
}
} Person & someElement() {
if(index>0){
return *buffer[++index];
}
else{index=0;}
}
void printOn(ostream & ostr){
}
private:
Person ** buffer;
int size;
int index;
};
ostream & operator<<(ostream & ostr, SetOfPersons & p) {
p.printOn(ostr);
return ostr;
}
My main file is:
Code:
//file main.cpp
#include <iostream.h>
#include <string.h>
#include "Date.h"
#include "Person.h"
#include "SetOfPersons.h"
main() {
int i;
//create some persons on the heap
Person *p1 = new Person("Lou", "[email protected]", 20, 6, 1960);
Person *p2 = new Person("Frank", "[email protected]", 20, 3, 1967);
Person *p3 = new Person("Ann", "[email protected]", 20, 8, 1960);
Person *p4 = new Person();
//Create some sets
SetOfPersons boys, girls;
//Add some persons to the sets
boys.add(*p4);
//test to see if the same object is retrieved from the set.
if (p1 != &boys.removeSomeElement() )
cout << "ERROR: the objects are different \n";
else
cout << "Good, the objects are the same \n";
boys.add( *p1);
boys.add( *p2);
girls.add( *p3);
boys.add(*(new Person("John", "[email protected]", 20, 3, 1967)));
girls.add(*(new Person("Sue", "[email protected]", 20, 3, 1967)));
boys.add(*(new Person("Frank", "[email protected]", 25, 4, 1958)));
girls.add(*(new Person("Mary", "[email protected]", 25, 4, 1955)));
boys.add(*(new Person("John", "johnchat.ca", 12, 12, 1970)));
//print all the boys using the removeSomeElement() method and delete them
int numberOfBoys = boys.sizea();
cout << "number of boys = " << numberOfBoys << "\n";
for(i = 0; i<numberOfBoys; i++) {
Person & boy = boys.removeSomeElement();
//cout << boy << "\n";
// delete &boy;
}
//print the girls using the << operator of the SetOfPersons class
//cout << "number of girls = " << girls.sizaa() << "\n";
//cout << girls << "\n";
//print of the girls birthdays and using the someElement() method
int numberOfGirls = girls.sizea();
//for(int i = 0; i<numberOfGirls; i++)
//cout << girl.someElement().getBirthDate() << "\n";
//delete all the girls from the heap
numberOfGirls = girls.sizea();
for(i = 0; i<numberOfGirls; i++) {
Person & her = girls.removeSomeElement();
// delete &her;
} //end of main
}