C++ &引用;“非模板”的模板定义;使用嵌套模板时出错
我正在尝试一个嵌套的模板结构,里面有一个静态变量。我已经将代码简化为这个简单的示例C++ &引用;“非模板”的模板定义;使用嵌套模板时出错,c++,templates,C++,Templates,我正在尝试一个嵌套的模板结构,里面有一个静态变量。我已经将代码简化为这个简单的示例 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<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;
模板结构A
{
模板结构B
{
静态常量无符号val;
};
};
模板
模板
常量未签名A::模板B::val;
这是给我的错误
template definition of non-template ‘const unsigned int A<T>::B<U>::val’
const unsigned A<T>::template B<U>::val;
非模板“const unsigned int A::B::val”的模板定义
常量未签名A::模板B::val;
我无法找到语法的确切错误。更改为:
template<typename T>
template<typename U>
const unsigned A<T>::B<U>::val;
模板
模板
常量无符号A::B::val;
您需要在定义中删除模板。象征
B
至少在标准的意义上是不相关的;
它是一个本地声明的名称,因为它是在
模板A
。见§14.6:
模板定义中可以使用三种名称:
-模板本身的名称,以及在模板本身中声明的名称
-依赖于模板参数的名称(14.6.2)
-模板定义中可见的作用域中的名称
从最后一行删除“模板”可以修复它。但我不想回答这个问题,因为我不知道为什么:史坦克斯,这才是关键。我想这不是正确的上下文来使用这个关键词,我想是的。不过,B看起来确实像一个依赖类型模板…谢谢。你知道为什么“模板”关键字在那里是无效的吗?B是从属模板。