使用嵌套模板时出现"template definition of non-template"错误
"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
。看到§14.6:
模板定义中可以使用三种名称:
-模板本身的名称,以及在模板本身中声明的名称。
-依赖于模板参数的名称(14.6.2)。
-在模板定义中可见的作用域的名称。
改成:
template<typename T>
template<typename U>
const unsigned A<T>::B<U>::val;
相关文章:
- 表示"accepting anything for this template argument" C++概念的通配符
- 传递给std::function template的template参数究竟代表什么
- 在template中使用std::variant的template函数
- C++ template for QList
- C++ - 为什么这里需要'template'关键字?
- 使用"std::enable_if_t" "function template has already been defined"
- 为什么'Go To Definition'给我多种选择?
- Pybind11 Class Definition
- C++模板错误:"invalid explicitly-specified argument for template parameter"
- C++ class template
- 在"template"和函数声明之间使用:template<typename trait> using tr = base_trait<trait> void fn(tr::t
- 为什么编译器说"candidate template ignored: couldn't infer template argument 'InputIterator'"?
- 为什么在这种情况下我需要 .template
- 静态数据成员:它"const declaration / constexpr definition"起作用?
- std::span constructor, libcxx vs libstdc++, template vs non-
- 模板函数参数到模板函数的"candidate template ignored: could not match ..."
- MacOS 上的 LLVM - 标准文件 iosfwd 中未知类型名称'template'
- std::get like (partial) template specialization
- 实现多类型算术运算符时如何解决"template argument deduction/substitution failure"
- 使用嵌套模板时出现"template definition of non-template"错误