记一次尴尬的调试错误:在形参表中不匹配

最近在学习c++ 2.0(11/14/17)新特性,刚写上几行代码,就遇到编译器报错:C2563 在形参表中不匹配, 代码如下:

// C11TEST.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include 

template
void printTest(const T arg) {
	std::cout << arg << std::endl;
}

// ... 代表pack(包)的意思
template // ...模板参数包
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 
_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;
}

 

这个还真是太容易输错了,话说这编译器提示的位置也太不准了,好了,小伙伴们写代码时一定要认真检查拼写问题哦...

你可能感兴趣的:(C++)