const T** getData() const
{
return m_data;
}
int getNumRows() const
{
return m_nRows;
}
int getNumCols() const
{
return m_nCols;
}
因此链接器找不到getNumRows()和getNumCols()函数,但getData()函数是。这是一个常见问题,函数是否需要有一个模板化参数才能生成?
@ 1 800信息
我已经通过标准宏从DLL导出了这个:
#ifdef ACORE_EXPORTS
#define ACORE_API __declspec(dllexport)
#else
#define ACORE_API __declspec(dllimport)
#endif
在班级定义中:
template < class T >
class ACORE_API matrix
答案 0 :(得分:7)
编译器只生成实际调用的成员函数。
例如:
template <class T>
class MyClass
{public:
int function1()
{
return 0;
}
int function2()
{
T t;
t->DoSomething();
return 0;
}
};
然后再
MyClass<int> m;
m.function1();
编译,因为从未编译过MyClass :: function2()。
您可以通过执行以下操作强制实例化整个类:
template class MyClass<int>;
在这种情况下,将实例化类中的每个方法。在此示例中,您将收到编译器错误。
答案 1 :(得分:1)
您是否实际从库中导出功能?您可以在.def文件中提及名称,或使用dllexport
和dllimport
指令来完成此操作。