嵌套模板类语法错误(MSVC)
Nested template class syntax error (MSVC)
我正在使用Visual Studio 2013,并且在模板外部类中返回嵌套模板类的函数存在一些问题。我做了一个最小的例子,真正的例子涉及更多的代码:
template<typename R, typename... S>
class Foo
{
public:
template<typename T>
class Bar
{
};
};
template<typename T, typename R, typename... S>
typename Foo<R, S...>::Bar<T> fooBar() { // <--- LINE 33
}
这会产生一组错误(大部分来自后续代码):
- 33:错误C2988:无法识别的模板声明/定义
- 33:错误C2059:语法错误:'<'
它也会影响后面的代码,之后的所有行都会出现大量的语法错误。
是我没有看到什么东西还是这可能是Visual Studio的问题?
问题/解决方案
您需要在此上下文中使用关键字template
来告诉编译器Bar
确实是一个模板,如下面的代码片段所示:
template<typename T, typename R, typename... S>
typename Foo<R, S...>::template Bar<T> fooBar() { // <--- LINE 33
...
}
但是为什么呢?
当模板名是依赖于的模板名时,我们需要使用template
关键字,没有它,编译器会将Foo<R, S...>::Bar
中的Bar
视为非模板,这是没有意义的;它会出错。
进一步阅读:
- 在哪里,为什么我必须把"模板"answers"typename"关键字?
相关文章:
- MSVC多行宏编译器错误
- MSVC 无法根据模板参数进行数学运算,这是一个错误吗?
- MSVC __debugbreak() 与 openGL 错误回调一起使用时不会产生调用堆栈
- MSVC 在不知道类型的情况下评估上下文(和错误)
- MSVC 中可能存在的编译器错误
- MSVC 错误:4 个重载中的任何一个都无法转换所有参数类型
- 如何使用CLion和MSVC编译器工具链编译wxWidgets Hello World应用程序而没有错误?
- MSVC 2017 - 错误 - 如何将模板类 X 的模板成员函数声明为嵌套类 X::Y 的好友
- 作为参数模板的模板类:MSVC 错误 - 错误 C2977:模板参数过多 (C++98)
- 为什么 MSVC 在使用正确的签名覆盖函数时会产生 C3668 错误?
- 这个 absl::StrCat 错误在哪里发生,在 Abseil 或 MSVC 中?
- MSVC 错误 C2971 常量 wchar_t * 作为模板参数
- MSVC 错误与运算符 |
- 重载常量和非常量转换运算符返回数组类型时出现 MSVC 错误 C2593
- MSVC 错误,将 constexpr 数组作为模板非类型参数
- Qt 5测试版2,Qt Creator 2.6,MSVC错误:Qt Creaator需要一个编译器来构建.在工具包选项中
- 在包含新CPP文件后的链接过程中,MSVC 错误
- enable_if+可变模板:是UB还是MSVC错误
- MSVC错误C2371 "redefinition; different basic types",除了我没有看到我在哪里重新定义任何东西
- 显式操作符bool未在lambda内部调用- MSVC错误