繁体   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