0
这是我mergeSort
方法内部的代码,为什么我不能在递归lambda函数中使用auto?
std::function<void(std::vector<T>*)> mergeSortRange = [&](std::vector<T>* array) -> void {
int length = (int) array->size();
if (length < 2)
return;
std::vector<T>* leftArr = new std::vector<T>(array->begin(), array->begin() + length/2);
std::vector<T>* rightArr = new std::vector<T>(array->begin() + length/2, array->end());
mergeSortRange(leftArr);
mergeSortRange(rightArr);
mergeTwoSortedArrrays(leftArr, rightArr, array);
delete leftArr;
delete rightArr;
};
我可以取代于第一线:
auto mergeSortRange = [&](std::vector<T>* array) -> void
,我希望它正常工作(请原谅我的无知)。
但相反的编译器抱怨说:
变量“mergeSortRange”与“自动”声明不能出现在其 自己的初始化。
我已经指定了参数和返回类型。有人可以对此有所了解吗?
它是如何“不起作用”? – NathanOliver
,因为变量“mergeSortRange”仅在语句结尾处获得其类型,并且您正试图在使用它之前使用它 – RiaD
什么是“类型”?它与返回类型不同吗? –