这是我的mergeSort
方法中的代码,
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
,我希望它能正常工作(原谅我的无知)。
但是编译器抱怨说:
变量&#39; mergeSortRange&#39;用&#39; auto&#39;声明不能出现在它的 拥有初始化程序。
我已经指定了参数和返回类型。有人可以对此有所了解吗?
答案 0 :(得分:-1)
你的程序格式不正确,因为Riad说,你试图在推断出类型之前调用该函数:
dcl.spec.auto/10如果需要具有未减少占位符类型的实体类型来确定表达式的类型,则程序格式错误。但是,一旦在函数中看到了一个非丢弃的return语句,那么从该语句推导出的返回类型可以在函数的其余部分中使用,包括在其他return语句中。