0

管理された配列をに変換するための入力引数としてtypenameを持つ単純な関数を実行したいだけです

.hファイル:

template <typename TYPE>
static void managed2unmanagedArray( interior_ptr<TYPE> ptrsrc, TYPE *ptrdest, UINT32 size ); 

.cppファイル:

template <typename TYPE>
void cUtil::managed2unmanagedArray( interior_ptr<TYPE> ptrsrc, TYPE *ptrdest, UINT32   size ) {
for ( UINT32 byte= 0; byte< size; byte++ ) {

    *ptrdest = *ptrsrc;
    ptrdest++;
    ptrsrc++;

}

}

.cppと.hの両方がコンパイルに合格し、コードを使用してテストすると、次のようになります。

array<UINT8>^ testUnitSrc = {1,2,3,4,5,6,7,8};
UINT8 testUnitDest[8] = {0};

cUtil::managed2unmanagedArray<UINT8>    (&testUnitSrc[0],&testUnitDest[0],sizeof(testUnitDest));

次のエラーで失敗します:

エラーLNK2020:未解決のトークン(06000004)nsUtil.cUtil :: managed2unmanagedArray

4

1 に答える 1

0

テンプレートを開始するときは、テンプレート メソッドの実装が利用可能である必要があります。

つまり、テスト コードでは、managed2unmanagedArray の実装を含める必要があります (現在は .cpp にあり、おそらく含めていません)。

これに対する典型的な解決策は、テンプレートの実装をヘッダー ファイルに入れることです。他にも使用できるアプローチがあります。

C++ テンプレート関数はヘッダーでコンパイルされますが、実装はコンパイルされませんを参照してください。

于 2012-06-19T13:28:00.447 に答える