模板类构造函数中的动态分配

时间:2012-09-22 05:15:09

标签: c++ runtime-error dynamic-memory-allocation template-classes

我正在处理堆栈类并且有两个构造函数。感兴趣的是这一个。

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这个问题让我无处可去。 任何提示都将不胜感激。

1 个答案:

答案 0 :(得分:4)

这不是运行时错误,而是链接器错误。问题可能是构造函数和析构函数的实现都在源文件中。对于模板类,您必须将所有方法的实现放在标题中(或者在使用它们的源文件中,但这相当于将它们放在标题中)。

所以基本上这样做:

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
};