关于new与new[]的用法!急!!!!!!!!!!!!!!!!!!!!
//personqueue.h
//personQueue class definition.
#ifndef PERSONQUEUE_H
#define PERSONQUEUE_H
class Person; //forward declaration
const int nDefaultQueueSize = 20;
class PersonQueue
{
public:
PersonQueue(int);
~PersonQueue();
//........
private:
Person *personPtr; //存放队列元素的指针(数组)
int size; //队列大小(容量)
int front; //队首位置
int rear; //队尾位置(最后一个元素的下一位置)
int count; //队列中元素的个数
};//end PERSONQUEUE_H
#endif
//personqueue.cpp
// Member-function definitions for class personqueue
#include <iostream>
using namespace std;
#include "personqueue.h" //personqueue class definition
#include "person.h" //person class definition
//constructor
PersonQueue::PersonQueue(int initSize = nDefaultQueueSize)
{
if(initSize < 1)
initSize = nDefaultQueueSize;
personPtr = new Person[initSize];//问题就出在这一语句
if (!personPtr)
{
cerr << "存储空间分配失败,应用程序将终止!"
<< endl;
exit(1);
}
front = 0;
rear = 0;
count = 0;
size = initSize;
}
//destructor
PersonQueue::~PersonQueue()
{
if (personPtr) delete [] personPtr;
front = 0;
rear = 0;
count = 0;
size = 0;
}
Person类声明
// person.h
// Person class definition.
#ifndef PERSON_H
#define PERSON_H
class Floor; // forward declaration
class Elevator; // forward declaration
class Person {
friend class PersonQueue;
public:
Person( int ); // constructor
~Person(); // destructor
Person& operator = (Person&);
void* operator new[]( unsigned int);
void* operator new( unsigned int);
void operator delete[](void*);
void operator delete(void*);
private:
static int personCount; // total number of people
int ID; // person's unique ID #
int destinationFloor; // destination floor #
}; // end class Person
#endif // PERSON_H
// person.cpp
// Member-function definitions for class Person.
#include <iostream>
using std::cout;
using std::endl;
using std::cerr;
#include "person.h" // Person class definition
#include "floor.h" // Floor class definition
#include "elevator.h" // Elevator class definition
// initialize static member personCount
int Person::personCount = 0;
// constructor
Person::Person( int destFloor )
: ID( ++personCount ),
destinationFloor( destFloor )
{
cout << "person " << ID << " constructed" << endl;
} // end Person constructor
// destructor
Person::~Person()
{
cout << "(person " << ID << " destructor invoked)" << endl;
} // end ~Person destructor
Person& Person::operator = (Person& per)
{
if (this != &per)
{
this ->personCount = per.personCount;
this ->ID = per.ID;
this ->destinationFloor = per.destinationFloor;
}
return *this;
}
void* Person::operator new[]( unsigned int size)
{
return operator new(size);
}
void* Person::operator new( unsigned int size)
{
void *p = (void *)malloc(size * sizeof(Person));
if(!p)
{
cerr<<"malloc is not successful" <<endl;
exit(1);
}
return p;
}
void Person::operator delete[](void* p)
{
operator delete(p);
}
void Person::operator delete(void* p)
{
if(p)
free(p);
}
这是一个关于人(对象)进入队列的实现,但在我的队列的类分配Person[size]时,说找不到默认的构造函数,不知道怎么解决,其他函数没问题,由于涉及的类太多,所以就拷了两个下来(如果大家要运行上面的代码,就将Person里面的其他不用的东西去掉就行),关于这个new[],我重载没问题,就是在另一个类(PersonQueue)里面出了问题,大家以前有没有出现这样的情况啊?有的就帮我看看啊,谢谢啊!!!!!
急啊!!!!!!!!!!!!!!!!!!明天就离开了,今晚一定要搞定呢!谢,在VC6.0下的错误如下:
personqueue.cpp(20) : error C2512: 'Person' : no appropriate default constructor available
Error executing cl.exe.