0 c++
嘿所有,所以这对我来说似乎是一个相当奇怪的问题.我有一个非常简单的模板化容器类,它是DLL的一部分.整个类在头文件中定义,以允许自动生成模板.现在DLL的另一部分实际上请求生成某个模板类型,因此代码应该存在于DLL中.但是,当使用来自另一个可执行文件的对象时,构造函数/析构函数以及多个其他函数都可以工作,但链接器找不到2个函数.以下是这两个函数的代码,以及一个工作函数.
const T** getData() const
{
return m_data;
}
int getNumRows() const
{
return m_nRows;
}
int getNumCols() const
{
return m_nCols;
}
Run Code Online (Sandbox Code Playgroud)
因此链接器找不到getNumRows()和getNumCols()函数,但getData()函数是.这是一个常见问题,函数是否需要有一个模板化参数才能生成?
@ 1 800信息
我已经通过标准宏从DLL导出了这个:
#ifdef ACORE_EXPORTS
#define ACORE_API __declspec(dllexport)
#else
#define ACORE_API __declspec(dllimport)
#endif
Run Code Online (Sandbox Code Playgroud)
并在课堂定义:
template < class T >
class ACORE_API matrix
Run Code Online (Sandbox Code Playgroud)
小智 7
编译器只生成实际调用的成员函数.
例如:
template <class T>
class MyClass
{public:
int function1()
{
return 0;
}
int function2()
{
T t;
t->DoSomething();
return 0;
}
};
Run Code Online (Sandbox Code Playgroud)
然后是
MyClass<int> m;
m.function1();
Run Code Online (Sandbox Code Playgroud)
编译,因为从未编译过MyClass :: function2().
您可以通过执行以下操作强制实例化整个类:
template class MyClass<int>;
Run Code Online (Sandbox Code Playgroud)
在这种情况下,将实例化类中的每个方法.在此示例中,您将收到编译器错误.