我有以下带有静态数据成员的类,但链接失败,
undefined reference to X<int, int>::list
#include <vector>
template < typename T1, typename T2 >
class X
{
public:
static std::vector< X*> list;
};
template<>
std::vector< X<int,int>* > X<int,int>::list;
int main()
{
X<int,int>::list.push_back( new X<int,int> );
}
问题是
template<> std::vector< X<int,int>* > X<int,int>::list;
是静态数据成员X<int,int>::list
的完全特化的非定义声明,即使它看起来像一个用默认构造函数初始化的定义。
解决这个问题的方法是使用初始化列表语法(即大括号
{}
)。
template<>
// vv----->now it is a definition
std::vector< X<int,int>* > X<int,int>::list{};