【问题标题】:C++/CLI typename Template As argument : Compilation errorC++/CLI 类型名模板作为参数:编译错误
【发布时间】:2012-06-19 03:48:52
【问题描述】:

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

【问题讨论】:

  • 你在哪里定义命名空间nsUtils?
  • 感谢您的回复,它在 .h 文件中。命名空间 nsUtil { 引用类 cUtil { public: cUtil(void); static void managed2unmanagedByteArray(interior_ptr ptrsrc, UINT8 *ptrdest, UINT32 大小);静态无效 unmanaged2managedByteArray(UINT8 *ptrdest,interior_ptr ptrsrc,UINT32 大小);模板 static void managed2unmanagedArray(interior_ptr ptrsrc, TYPE *ptrdest, UINT32 size ); }; }
  • 除了模板方法之外,我还写了其他方法,它们都有效,但不适用于模板相关方法,所以我开始怀疑我编写代码的方式......谢谢。

标签: templates c++-cli


【解决方案1】:

实例化模板时,模板方法的实现需要可用。

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

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

C++ template function compiles in header but not implementation

【讨论】:

    猜你喜欢
    • 2020-11-17
    • 1970-01-01
    • 2020-10-13
    • 1970-01-01
    • 2020-04-07
    • 2021-09-21
    • 2016-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多