簡體   English   中英

我正確地實現了這個模板類嗎?

[英]am i implementing this template class correctly?

好的,我正在嘗試實現一個名為Queue的基於數組的隊列的模板化類。 這就是我做到的。 首先,這是實現模板類的正確方法嗎? 問題是,當我嘗試編譯時,我收到錯誤消息

對'Queue :: Queue()'的未定義引用
對'Queue :: ~Queue()'的未定義引用

有什么想法有什么不對嗎? 我聲明錯誤或執行錯誤嗎?

queue.h

#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

queue.cpp

#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(){
    ...
}

main.cpp中

#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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM