繁体   English   中英

使用嵌套模板时出现“非模板的模板定义”错误

[英]“template definition of non-template” error while using nested 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 B<U>::val;

这给我错误

template definition of non-template ‘const unsigned int A<T>::B<U>::val’
const unsigned A<T>::template B<U>::val;

我找不到语法到底有什么问题。

您需要将template放入定义中。 至少在标准意义上,符号B是不依赖的。 这是本地声明的名称,因为它是在模板A定义A 参见§14.6:

模板定义中可以使用三种名称:

—模板本身的名称,以及在模板本身内声明的名称。

—名称取决于模板参数(14.6.2)。

—在模板定义中可见的作用域名称。

改成:

template<typename T>
template<typename U>
const unsigned A<T>::B<U>::val;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM