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

C++ static member variable of nested class in template class

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

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

警告:
警告 C4346 'Cache': 从属名称不是类型

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

添加typename

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

你可以阅读https://en.cppreference.com/w/cpp/language/dependent_name,但是简而言之,编译器不知道它是不是一个类型。