0
我正在嘗試爲類項目創建一個隊列數組。我已經爲FIFO隊列編寫了規範文件和實現文件。然而,當我寫:如何創建一個隊列數組?
QueType<movieType> fifoQueue[6];
我收到此錯誤信息:
錯誤LNK2019:無法解析的外部符號 「公用:__thiscall QueType :: QueType(無效)」?(?? 0 $ QueType @VmovieType @@@@ QAE @ XZ)在函數_main中引用
爲了能夠創建隊列數組,我需要添加什麼?另外,我不能使用STL隊列。
這裏是主文件:
#include "movieType.h"
#include <iostream>
#include <fstream>
#include "QueType.h"
using namespace std;
int main()
{
movieType movie[9];
ifstream inFile("movie1.txt");
//I get the error here
QueType<movieType> fifoQueue[6];
return 0;
}
這裏是規範文件:
//definition of NodeType
template <class ItemType>
struct NodeType
{
ItemType info; // store data
NodeType* next; // sotre location of data
};
//exception class used when queue is full
class FullQueue
{};
//Exception class used when queue is empty
class EmptyQueue
{};
//templated queue class
template<class ItemType>
class QueType
{
public:
QueType();
//Function: class constructor
//Precondition: none
//Postcondition: it initializes the pointers, front and rear to null
~QueType();
//Function:class destructor
//Precondition: queue has been initialized
//Postcondition: deallocate allocated memory
void MakeEmpty();
//Function: determines whether the queue is empty
//Precondition: queue has been initialized
//Postcondition:queue is empty
bool IsEmpty() const;
//Function:determines whether the queue is empty
//Precondition:queue has been initialized
//Postcondition:Function value = (queue is empty)
bool IsFull() const;
//Function:determines whether the queue is full
//Precondition:queue has been initialized
//Postcondition:Function value = (queue is full)
void Enqueue(ItemType newItem);
//Function:Adds newItem to the rear of the queue
//Precondition:queue has been initialized
//Postcondition:if (queue is full), FullQueue exception is thrown,
//else newItem is at rear of queue
void Dequeue(ItemType& item);
//Function:removes front item from the queue and returns it in item
//Precondition:queue has been initialized
//Postcondition:if (queue is empty), EmptyQueue exception is thrown
//and item is undefines, else front element has been removed from
//queue and item is a copy of removed element
private:
NodeType<ItemType>* front; //pointer points to the front to the queue
NodeType<ItemType>* rear; // pointer points to the rear of the queue
};
和規範文件:
#include "QueType.h"//gives access to QueType class
#include <cstddef> //for NULL
#include <new> // for bad_alloc
template<class ItemType>
QueType<ItemType>::QueType()
{
front = NULL;
rear = NULL;
}
template <class ItemType>
QueType<ItemType>::~QueType()
{
MakeEmpty();
}
template <class ItemType>
void QueType<ItemType>::MakeEmpty()
{
NodeType<ItemType>* tempPtr;//temporary pointer
while(front != NULL)
{
tempPtr=front;
front = front->next;
delete tempPtr;
}
rear = NULL;
}
template <class ItemType>
bool QueType<ItemType>::IsEmpty() const
{
return (front == NULL);
}
template <class ItemType>
bool QueType<ItemType>::IsFull() const
{
NodeType<ItemType>* location;
try
{
location = new NodeType<ItemType>
delete location;
return false;
}
catch(std::bad_alloc exception)
{
return true;
}
}
template <class ItemType>
void QueType<ItemType>::Enqueue(ItemType newItem)
{
if (IsFull())
throw FullQueue();
else
{
NodeType<ItemType>* newNode;
newNode = new NodeType<ItemType>;
newNode ->info=newItem;
newNode->next=NULL;
if(rear== NULL)
front= newNode;
else
rear->next=newNode;
rear=newNode;
}
}
我已經添加了實現文件。 – user1561949
@ user1561949答覆已更新。 – Fraser
感謝您的幫助! – user1561949