I’m writing codes for a c++ assignment and I’ve got Queue.h and Queue.cpp file. But cannot make use of them coz when I put #include “Queue.h” in the main(). I got the above problem in the line 12 of Queue.h file.
error C2371: 'ItemType' : redefinition; different basic types
I wanted to put RecordService class as Itemtype.
My Queue.h file is below.
#pragma once
#ifndef Queue_H
#define Queue_H
#include<iostream>
#include<string>
#include "RecordService.h"
using namespace std;
typedef RecordService ItemType; // << problem here
/** ADT queue - Pointer-based implementation. */
class Queue
{
private:
/** A node on the queue. */
struct Node
{
/** A data item on the queue. */
ItemType item;
/** Pointer to next node. */
Node *next;
}; // end Node
/** Pointer to front node in the queue. */
Node *frontNode;
/** Pointer to back node in the queue. */
Node *backNode;
public:
/** Default constructor. */
Queue();
/** Destructor. */
~Queue();
// Queue operations:
bool isEmpty() const;
bool enqueue(ItemType& newItem);
bool dequeue();
bool dequeue(ItemType& item);
void getFront(ItemType& item) const;
}; // end Queue
// End of header file.
#endif
My Queue.cpp is here
#include "Queue.h" // header file
Queue::Queue(void)
{
} // end default constructor
Queue::~Queue()
{
while (!isEmpty())
dequeue();
} // end destructor
bool Queue::isEmpty() const
{
return backNode == NULL;
} // end isEmpty
bool Queue::enqueue(ItemType& newItem)
{
// create a new node
Node *newNode = new Node;
newNode->item = newItem;
newNode->next = NULL;
// insert the new node
if (isEmpty())
// insertion into empty queue
frontNode = newNode;
else
// insertion into nonempty queue
backNode->next = newNode;
backNode = newNode; // new node is at back
return true;
} // end enqueue
bool Queue::dequeue()
{
if(isEmpty())
{
cout<<"The queue is empty."<<endl;
}
else
{
Node *temp= frontNode;
if(frontNode==backNode)
{
frontNode=NULL;
backNode=NULL;
}
else
frontNode=frontNode->next;
temp->next=NULL;
delete (temp);
}
return true; // end if
} // end dequeue
bool Queue::dequeue(ItemType& item)
{
if(isEmpty())
{
cout<<"The queue is empty."<<endl;
}
else
{
item = frontNode->item;
dequeue();
}
return true;
} // end dequeue
void Queue::getFront(ItemType& item) const
{
if (!isEmpty())
// queue is not empty; retrieve front
item = frontNode->item;
else
cout << "The queue is empty." << endl;
} // end getFront
u may see that i want to put RecordService as Itemtype in “Queue.h” header. Here is RecordService.h
#pragma once
#ifndef RecordService_H
#define RecordService_H
#include <iostream>
#include <string>
#include <ctime>
using namespace std;
class RecordService
{
public:
RecordService();
RecordService(string, string, string, int, double, bool, string);
~RecordService();
//set methods
void setTransID(char);
void setCusName(string);
void setVehicleNo(string);
void setCarType(string);
void setWashDuration(int);
void setShampooDuration(int);
void setPolishDuration(int);
void setVacuumDuration(int);
void setTotalDuration(int,int,int,int);
void setWashingCharge(double);
void setShampooingCharge(double);
void setPolishingCharge(double);
void setVacuumingCharge(double);
void setTotalCharge(double,double,double,double);
void setRewardStatus(bool);
void setDateOfTrans(string);
//get methods
char getTransID();
string getCusName();
string getVehicleNo();
string getCarType();
int getWashDuration();
int getShampooDuration();
int getPolishDuration();
int getVacuumDuration();
int getTotalDuration();
double getWashingCharge();
double getShampooingCharge();
double getPolishingCharge();
double getVacuumingCharge();
double getTotalCharge();
bool getRewardStatus();
string getDateOfTrans();
private:
char transID;
string CusName;
string vehicleNo;
string carType;
int WashDuration;
int ShampooDuration;
int PolishDuration;
int VacuumDuration;
int TotalDuration;
double WashingCharge;
double ShampooingCharge;
double PolishingCharge;
double VacuumingCharge;
double TotalCharge;
bool RewardStatus;
string DateOfTrans;
};
#endif
Appreciation in advance for helping me. I cannot move on to other parts because of this error.
ItemTypecould be moved inside theQueueclass. Now it may collide with other headers of yours that hasItemTypedefined.So instead of
use
ItemTypewill still be accessible asItemTypeinside theQueueandQueue::ItemTypeoutside theQueueclass (if madepublic)