模板类中嵌套类的C ++静态成员变量

时间:2019-05-19 12:57:17

标签: c++ templates inner-classes static-variables

我制作了一个模板类 Block ,并希望为 Block 的每种实例类型缓存一些数据。因此,我创建了一个内部类 Cache ,该类用于存储和初始化 Block 类实例经常使用的数据。但是编译器(Visual Studio 2017,C ++ 17)不接受静态成员变量定义,并且错误消息对我没有帮助。我的代码有什么问题以及如何实现我的目标?

错误:
错误C2061语法错误:标识符'Cache'

警告:
警告C4346“缓存”:从属名称不是类型

template<int D>
class Block
{
private:
    class Cache
    {
    public:
        int mData[D];
    public:
        Cache();
    };
private:
    static Cache mCache;
public:
    Block();
};

template<int D>
Block<D>::Cache Block<D>::mCache; // Syntax error "Cache"!

template<int D>
inline Block<D>::Block()
{
    // Use cache data.
    cout << Block<D>::mCache.mData[0] << endl;
}

template<int D>
inline Block<D>::Cache::Cache()
{
    // Initialise cache data.
    mData[0] = D;
}

1 个答案:

答案 0 :(得分:2)

添加typename

template<int D>
typename Block<D>::Cache Block<D>::mCache;

您可以阅读https://en.cppreference.com/w/cpp/language/dependent_name,但简单地说,编译器不知道它是否是类型。