[英]am i implementing this template class correctly?
好的,我正在嘗試實現一個名為Queue的基於數組的隊列的模板化類。 這就是我做到的。 首先,這是實現模板類的正確方法嗎? 問題是,當我嘗試編譯時,我收到錯誤消息
對'Queue :: Queue()'的未定義引用
對'Queue :: ~Queue()'的未定義引用
有什么想法有什么不對嗎? 我聲明錯誤或執行錯誤嗎?
#ifndef __QUEUE_H__
#define __QUEUE_H__
template <class T>
class Queue
{
int first;
T* array;
public:
Queue();
~Queue;
void enqueue(T next);
T dequeue();
bool is_empty();
bool is_full();
};
#endif
#include "queue.h"
template <class T> Queue<T>::Queue(){
...
}
template <class T> Queue<T>::~Queue(){
...
}
template <class T> void Queue<T>::enqueue(T next){
...
}
template <class T> T Queue<T>::dequeue(){
...
}
template <class T> bool Queue<T>::is_empty(){
...
}
template <class T> bool Queue<T>::is_full(){
...
}
#include "queue.h"
#include <iostream>
using namespace std;
int main(){
Queue<int> test;
return 0;
}
幾個問題:
您的問題的原因 - C ++並不真正支持將模板拆分為.h和.cpp文件 - 您需要將所有內容放入標題中
名稱__QUEUE_H__
保留用於C ++實現,所有名稱都包含雙下划線或以下划線和大寫字母開頭。 您不能在自己的代碼中創建此類名稱。
你可能會發現用std :: deque而不是C風格的數組來實現隊列更方便
我假設您正在將此作為學習練習,但如果不是,您應該知道C ++標准庫已經包含std :: queue模板類。
對於幾乎C ++的每個實現,模板實際上只是編譯器所知道的一種奇特的宏形式。 必須存在定義,以便編譯器可以生成代碼來代替模板。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.