I made a template class Block and wanted to cache some data for each instance type of Block. For this reason I created an inner class Cache which is storing and initialising the data often used by Block class instances. But the compiler (Visual Studio 2017, C++17) is not accepting the static member variable definition and the error message is not helping me. Whats wrong with my code and how I can accomplish my goal?
Errors:
Error C2061 syntax error: identifier 'Cache'
Warnings:
Warning C4346 'Cache': dependent name is not a type
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;
}