错误:在"A<T*>::obj"之前需要"类型名",因为"A<T*>"是依赖范围

error: need ‘typename’ before ‘A<T*>::obj’ because ‘A<T*>’ is a dependent scope

本文关键字:gt lt 因为 依赖 范围 类型 obj 错误      更新时间:2023-10-16

假设我有一个名为的类

template<class T>
class A
{
protected:
    static T* obj;
    A() {}
    ~A() {}
public:
    // methods...
};

// Somewhere in my source file...
template <class T> A <T*> ::obj = NULL;

由于各种原因,我需要声明一个静态成员obj,而gcc不喜欢在类的定义过程中初始化它们(显然,您可以使用visualstudio)

无论如何,我如何正确地声明obj?

不能像那样部分地专门化对象。相反,只需这样做:

template <class T> T * A<T>::obj = NULL;

请确保这与类模板定义一起出现在文件中!