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

在设置模板时,模板方法的实现需要可用。

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

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

请参阅模板函数在标头中编译C++而不是实现

最新更新