在模板类的构造函数动态分配(Dynamic Allocation in Template Class

2019-09-22 18:22发布

我工作的一个堆栈类,有两个构造函数。 一个令人感兴趣的是这一个。

template <typename T>
stack<T>::stack( const int n)
{
 capacity = n ;
 size = 0 ;
 arr = new T [capacity] ;
}

我打电话这里面主要是这样。

stack<int> s1(3) ;

程序编译罚款,但我得到这个运行时错误。

1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall
 stack<int>::~stack<int>(void)" (??1?$stack@H@@QAE@XZ) referenced in function _main

1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall    
stack<int>::stack<int>(int)" (??0?$stack@H@@QAE@H@Z) referenced in function _main

1>D:\\Microsoft Visual Studio 10.0\Visual Studio 2010\Projects\Expression
 Evaluation\Debug\Expression Evaluation.exe : fatal error LNK1120: 2 unresolved externals

我的工作在Microsoft visual studio 2010而这个问题是无处带我去。 任何暗示将不胜感激。

Answer 1:

这不是一个运行时错误,这是一个连接错误。 这个问题可能是,构造函数和析构函数的实现是在源文件中。 随着模板类,你必须把标头中的所有方法的实现(或使用它们的源文件中,但是这等同于把他们的头)。

所以基本上做到这一点:

template<class T>
class stack
{
public:
    stack( const int n)
    {
        capacity = n ;
        size = 0 ;
        arr = new T [capacity] ;
    }

    // and the same for all other method implementations
};


文章来源: Dynamic Allocation in Template Class Constructor