类模板中静态变量的显式实例化

问题描述 投票:0回答:1

我有以下带有静态数据成员的类,但链接失败,

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> );

}
c++ static-members explicit-instantiation
1个回答
0
投票

问题

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{};
© www.soinside.com 2019 - 2024. All rights reserved.