最近在学习c++ 2.0(11/14/17)新特性,刚写上几行代码,就遇到编译器报错:C2563 在形参表中不匹配, 代码如下:
// C11TEST.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
template<typename T>
void printTest(const T arg) {
std::cout << arg << std::endl;
}
// ... 代表pack(包)的意思
template<typename T, typename... Types> // ...模板参数包
void printTest(const T& firstarg, const Types&... otherargs) // ...函数参数类型包
{
std::count << firstarg << std::endl;
std::count << "left sizeof(otherargs)=" << sizeof...(otherargs) << std::endl;
printTest(otherargs...); // ...函数参数包
}
int main()
{
printTest(1, 2, 3);
return 0;
}
代码报错:
严重性 代码 说明 项目 文件 行 禁止显示状态 禁止显示状态
错误 C2563 在形参表中不匹配 xxx.cpp 18
可是第18行明明就是个“}”符合啊?怎么就报参数不匹配错误了,开始以为是
变长参数模板写得有问题,查了半天,才发下原来是std::cout 写错误了,写成了std::count, 这错误害我卡了半天...
可为什么没有报std::count拼写错误了,原来std::count还真是个模板函数,用于实现获取容器里有相同值的数量,摘抄实现如下:
// FUNCTION TEMPLATE count
template <class _InIt, class _Ty>
_NODISCARD _Iter_diff_t<_InIt> count(const _InIt _First, const _InIt _Last, const _Ty& _Val) {
// count elements that match _Val
_Adl_verify_range(_First, _Last);
auto _UFirst = _Get_unwrapped(_First);
const auto _ULast = _Get_unwrapped(_Last);
_Iter_diff_t<_InIt> _Count = 0;
for (; _UFirst != _ULast; ++_UFirst) {
if (*_UFirst == _Val) {
++_Count;
}
}
return _Count;
}
这个还真是太容易输错了,话说这编译器提示的位置也太不准了,好了,小伙伴们写代码时一定要认真检查拼写问题哦...