我正在尝试使用内置静态变量的嵌套模板结构。我把代码缩减到了这个准确的例子。
template<typename T> struct A
{
template<typename U> struct B
{
static const unsigned val;
};
};
template<typename T>
template<typename U>
const unsigned A<T>::template B<U>::val;
这给了我错误
template definition of non-template ‘const unsigned int A<T>::B<U>::val’
const unsigned A<T>::template B<U>::val;
我无法找到语法的确切错误。
答案 0 :(得分:1)
您需要删除定义中的template
。符号
B
并非依赖,至少在标准意义上;
它是一个本地声明的名称,因为它是在
模板A
。见§14.6:
模板定义中可以使用三种名称:
- 模板本身的名称,以及模板本身内声明的名称。
- 名称取决于模板参数(14.6.2)。
- 来自模板定义中可见范围的名称。
答案 1 :(得分:0)
更改为:
template<typename T>
template<typename U>
const unsigned A<T>::B<U>::val;