静态成员类模板的初始化

时间:2013-10-08 16:44:32

标签: c++ templates

请找到以下代码:

#include <iostream>
using namespace std;
template<typename T>
class A
{
    static A* self;
};

template<typename T>
A* A<T>::self = NULL;
int main()
{
    return 0;
}

初始化静态指针时遇到编译问题。虽然有这么多链接说的方式相同(我初始化的方式),但问题仍然存在。以下是编译错误。

"expected constructor, destructor, or type conversion before '*' token"

2 个答案:

答案 0 :(得分:2)

A是一个类模板,因此在定义指向它的指针时需要指定模板参数。

而不是:

template<typename T>
A* A<T>::self = NULL;

它应该是:

template<typename T>
A<T>* A<T>::self = NULL;

在类体中,指定模板参数是可选的,因此您可以在那里写A*,它将被视为与A<T> *相同。

答案 1 :(得分:0)

尝试:

template<typename T> A<T>* A<T>::self = NULL;