1

当我尝试制作模板 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;
}

如果这个函数的定义 Steps into class code block ,它工作正常但是......?!

这就是我在 main 中的称呼:堆栈运算符(大小);

4

3 回答 3

3

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

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

而不是这个:

template <class T>
bool Stack<T>::isempty()
          ^^^
于 2013-05-03T06:27:38.690 回答
0

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

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

于 2013-05-03T04:33:39.397 回答
0

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

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

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

A. 去掉 cpp 文件,把所有函数的主体放在 class h 文件中

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

#include "xxxx.cpp"

你不必叫它cpp,你可以随便叫它

于 2013-05-03T04:17:51.443 回答