0

我正在为 C++ 分配编写代码,并且我有 Queue.h 和 Queue.cpp 文件。但是当我将#include“Queue.h”放在main()中时,无法使用它们。我在 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

提前感谢您帮助我。由于此错误,我无法继续进行其他部分。

4

1 回答 1

0

ItemType可以在Queue课堂内移动。现在它可能会与您已ItemType定义的其他标题发生冲突。

所以而不是

typedef RecordService ItemType;  // << problem here

/** ADT queue - Pointer-based implementation. */
class Queue
{
    ...
}

利用

/** ADT queue - Pointer-based implementation. */
class Queue
{
    typedef RecordService ItemType;

    ...
}

ItemType仍然可以在课堂ItemType内外访问Queue(如果做了)Queue::ItemTypeQueuepublic

于 2013-01-16T02:11:47.060 回答