函数模板编译错误
Function template compilation error
以下代码
template <typename T, class ContainerType>
ContainerType<T>::iterator elementIteratorAt(ContainerType<T> container, size_t index)
{
return container.end();
}
在函数的返回类型(ContainerType<T>::iterator
)处生成编译错误:
错误C2988:无法识别的模板声明/定义
为什么会发生这种情况,如何正确地编写它?我甚至没有实例化模板,只是编译
您的代码有两个问题。首先,ContainerType<T>::iterator
是依赖类型,因此必须添加typename
关键字。接下来,ContainerType
应该是一个模板,但是模板参数没有表明这一点。你需要一个模板模板参数
template <typename T, template<class...> class ContainerType>
typename ContainerType<T>::iterator
elementIteratorAt(ContainerType<T> container, size_t index)
{
return container.end();
}
现场演示
我把模板模板形参改成可变的,因为标准库中的容器都有多个模板形参。
正如评论中建议的那样,您也可以将其简化为
template <class ContainerType>
typename ContainerType::iterator
elementIteratorAt(ContainerType container, size_t index)
{
return container.end();
}
如果您需要访问容器中的元素类型,请使用ContainerType::value_type
(将适用于标准库容器)
您需要typename
关键字任何时候您有一个依赖类型(如ContainerType<T>::iterator
):
template <typename T, class ContainerType>
typename ContainerType<T>::iterator elementIteratorAt(ContainerType<T> container, size_t index)
相关文章:
- 用MacOS Mojave编译C++:致命错误:mpi.h:没有这样的文件或目录
- std::is_base_of表示ctor编译错误
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- Qt5:使用QCommandLineParser类时出现奇怪的编译错误
- Qt Cmake 错误编译"GuiSupportQt not found"
- Opengl 精度转换错误编译错误 E0415
- 库将ARM架构错误编译为架构X64
- RT 音频 Mac 错误 g++ 编译错误
- 错误编译Boost.log
- 错误编译QT创建者 / QT窗口小部件示例
- 错误编译MIPS32
- Visual Studio 2013 中的错误(编译和运行代码)
- 链接错误编译qt项目在visual 2010
- 无法用模板错误编译nsgmls
- 奇怪的错误.编译失败
- 如果有人调用c++中的方法,则强制错误(编译时)
- 来自autoconf测试的错误编译命令
- 时间限制超出错误C++编译
- SFML 2.3 和 CodeBlocks 错误编译