我制作了一个模板类 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;
}
答案 0 :(得分:2)
添加typename
template<int D>
typename Block<D>::Cache Block<D>::mCache;
您可以阅读https://en.cppreference.com/w/cpp/language/dependent_name,但简单地说,编译器不知道它是否是类型。