C ++ / CLI typename Template作为参数:编译错误

时间:2012-06-19 03:48:53

标签: templates c++-cli

我只想做一个简单的函数,它将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

1 个答案:

答案 0 :(得分:0)

在实例化模板时,需要实现模板方法。

也就是说,在您的测试代码中,需要包含managed2unmanagedArray的实现(它当前在您的.cpp中,并且可能您不包括它)。

典型的解决方案是将模板的实现放入头文件中。您还可以使用其他方法。

请参阅C++ template function compiles in header but not implementation