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



我做了一个模板类 block ,并想为每种实例类型 block 的每个实例类型缓存一些数据。因此,我创建了一个内部类缓存,它正在存储和初始化 block> 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;
}

添加 typename

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

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

最新更新