在C ++中用类模板定义函数

时间:2013-05-03 00:21:07

标签: c++ templates

当我尝试制作模板Stack类

时,我遇到了一个错误类Stack'没有使用模板参数“>
template <class T>
class Stack{                        /// Declare A NEW Class NAMED STACK

private :
    T* data;
    int pointer;
    int size1;

public :
    T pop();
    T top();
    bool push(T);
    bool isfull();
    bool isempty();
    Stack(int size1)
    {
        this->size1 = size1;
        pointer = 0;
        data = new int [size1];
    }
    ~Stack()
    {
        delete [] data;
    }

};

真正的问题是我想在模板类之外定义函数!!(更易读)但它不起作用!!

这是我对其中一个功能的定义:

template <class T>
bool Stack<T>::isfull()
{
if(pointer==size1+1)
    return true;

return false;
}

如果此函数的定义步入类代码块,它工作正常但是......?!

这就是我如何称呼它:     堆栈运算符(大小);

3 个答案:

答案 0 :(得分:3)

您是否错过了某个功能定义中的<T>?即有这个:

template <class T>
bool Stack::isempty()

而不是:

template <class T>
bool Stack<T>::isempty()
          ^^^

答案 1 :(得分:0)

经过多年的c ++编程,我意识到:

  

如果你不知道如何在c ++中使用模板,你只知道一半的C ++。

长话短说,有两种方法可以定义模板类:

一个。摆脱cpp文件,将所有函数的主体放在类h文件

B中。将函数体放在cpp文件中,但不要在项目中添加此文件。并在h文件的最后添加一个这样的包含行:

#include "xxxx.cpp"

您不必将其称为cpp,您可以随意调用它

答案 2 :(得分:0)

您没有向我们提供此详细信息,但您可能只是错误地尝试在cpp文件而不是头文件中实现该功能。

模板函数需要在头文件中实现。