使用 2 类 实现队列模板

Implement a template of a Queue, using 2 Classes

我有问题。我实现了一个队列,同时使用 Class“队列”和 Class“元素”。 我现在遇到的问题是,我不知道如何为 class 元素创建模板。

如果我不使用模板而只使用 int 而不是 T。一切正常。我已经在 Internet 上查找了很多示例。但是没有人使用两个 classes,这可能更有效。我想我的问题是我不知道如何在模板中使用指针。

PS:我认为 Queue.h and.cpp 中的模板有效,但如果我开始尝试为 Element 创建模板,它就不起作用。

我的Queue.h文件

#ifndef ELEMENT_H
#define ELEMENT_H
#include "Element.h"


template <class T>
class Queue{
    public:
        explicit Queue(int max_queue);
        ~Queue() = default;
    
        void enqueue(T inhalt);
        Element* dequeue();
        Element* show();
        bool isEmpty();

        
    private:
        Element<T>* front{};
        Element<T>* back{};
        int max;
        int anzahl = 0;

};
#endif

我的Queue.cpp文件

#include "Queue.h"
#include <iostream>
#include <string>

template <class T>
Queue<T>::Queue(int max_queue){
    max = max_queue;
}

template <class T>
void Queue<T>::enqueue(T inhalt){
    Element* e = new Element(inhalt);
    if(max > anzahl){   
        if(isEmpty()){
            front = back = e;
        }else{
            back->setNext(e);
            back = e;
        }
    }   anzahl++;
}


template <class T>
Element* Queue<T>::dequeue(){
    Element* e = front;
    front = front->getNext();
    e->setNext(nullptr);
    return e;
}

template <class T>
bool Queue<T>::isEmpty()
{
    return anzahl == 0;
}


template <class T>
Element* Queue<T>::show()
{
    return front;
}

我的Element.h文件

#ifndef QUEUE_H
#define QUEUE_H

class Element{
    public:
        explicit Element(int);
        ~Element() = default;
        
        int getInhalt()const;
        void setInhalt(int);
        Element*getNext()const;
        void setNext(Element*);
        
    protected:
        int inhalt;
        Element* next;
};  
#endif

我的Element.cpp文件

#include <string>
#include "Element.h"


Element::Element( int inhalt_element )
{
    inhalt = inhalt_element;
    next = nullptr;
}

int Element::getInhalt() const {
    return inhalt;
}

void Element::setInhalt(int inhalt) {
    Element::inhalt = inhalt;
}

Element* Element::getNext() const {
    return next;
}

void Element::setNext(Element *next) {
    Element::next = next;
}

我收到的警告是 main.cpp:(.text+0x1a): undefined reference to `Queue::Queue(int)' 如果我尝试为元素 class 使用模板。警告中有数百行,所以我知道我的想法完全错误。

如果它是关于编程的,我仍然是新手,所以任何帮助或任何想法都会非常感激。

谢谢

模板类的实现必须在.h中完成 以下代码编译。

#include <iostream>
#include <string>

template <class T> 
class Element{
public:
    
Element( T inhalt_element ){
    inhalt = inhalt_element;
    next = nullptr;
}

T getInhalt() const {
    return inhalt;
}

void setInhalt(T inhalt) {
    this->inhalt = inhalt;
}

Element<T>* getNext() const {
    return next;
}

void setNext(Element<T> *next) {
    this->next = next;
}
        
protected:
    T inhalt;
    Element<T>* next;
};  

template <class T> 
class Queue{
  public:
  Queue(int max_queue){
      max = max_queue;
  }

  void enqueue(T inhalt){
      Element<T>* e = new Element<T>(inhalt);
      if(max > anzahl){   
          if(isEmpty()){
              front = back = e;
          }else{
              back->setNext(e);
              back = e;
          }
      }   anzahl++;
  }


  Element<T>* dequeue(){
      Element<T>* e = front;
      front = front->getNext();
      e->setNext(nullptr);
      return e;
  }

  bool isEmpty(){
      return anzahl == 0;
  }

  Element<T>* show(){
      return front;
  }
  
  private:
  Element<T>* front{};
  Element<T>* back{};
  int max;
  int anzahl = 0;
};

int main() {
  std::cout << "Hello World!";
  Queue<int> queue(10);
  return 0;
}