在c++中定义类模板外的函数

Define Functions out of Class template in C++

本文关键字:函数 c++ 定义      更新时间:2023-10-16

当我试图创建一个模板堆栈类

时,我遇到了一个错误类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;
}

如果这个函数的定义步进类代码块,它工作正常但是…?!

我是这样在main中调用它的:

您是否错过了函数定义中的<T> ?例如:

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

而不是:

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

您没有给我们这个细节,但是您可能只是犯了一个错误,试图在cpp文件而不是头文件中实现这个函数。

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

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

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

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

。去掉cpp文件,把所有函数体放在类h文件

B。将函数体放在cpp文件中,但不要将该文件添加到项目中。在h文件的最后添加如下的include行:

#include "xxxx.cpp"

你不必叫它cpp,你想叫什么就叫什么