1

私はスタッククラスに取り組んでおり、2つのコンストラクターがあります。興味深いのはこれです。

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、この問題は私をどこにも連れて行ってくれません。ヒントをいただければ幸いです。

4

1 に答える 1

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
};
于 2012-09-22T05:25:35.980 に答える