私はc++割り当てのコードを書いていますが、Queue.hファイルとQueue.cppファイルがあります。しかし、main()に#include "Queue.h"を入れると、それらを利用できません。Queue.hファイルの12行目で上記の問題が発生しました。
error C2371: 'ItemType' : redefinition; different basic types
RecordServiceクラスをItemtypeとして配置したかったのです。
私のQueue.hファイルは以下のとおりです。
#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
私のQueue.cppはここにあります
#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
RecordServiceをItemtypeとして「Queue.h」ヘッダーに配置したい場合があります。これが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
私を助けてくれてありがとう。このエラーのため、他の部分に進むことができません。