Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试使用内嵌函数的C++ Q排序_C++_Lambda_C++11_Qsort - Fatal编程技术网

尝试使用内嵌函数的C++ Q排序

尝试使用内嵌函数的C++ Q排序,c++,lambda,c++11,qsort,C++,Lambda,C++11,Qsort,我正在尝试为qsort的比较器创建一个内联函数-类似这样: function<int(int,int)> comparesort = [smarkers, emarkers, strSearch] (int *arg1, int *arg2) { return 0; }; qsort(sortptrs, nKeywords, sizeof(int), comparesort); 它给出了一个错误: 错误C3499:指定为具有void返回类型的lambda无法返回值 [7/30下午3

我正在尝试为qsort的比较器创建一个内联函数-类似这样:

function<int(int,int)> comparesort = [smarkers, emarkers, strSearch] (int *arg1, int *arg2) { return 0; };
qsort(sortptrs, nKeywords, sizeof(int), comparesort);
它给出了一个错误:

错误C3499:指定为具有void返回类型的lambda无法返回值

[7/30下午3:55编辑]


实际上,我需要一个指针排序——我有一个从VB.Net托管代码传入的字符串中找到的单词的开始字节和结束字节数组。我还有一个指针数组,它包含1,2,3。。。我需要对指针进行排序

似乎我不能用std::sort实现这一点,所以我实现了自己的shell排序…

qsort是旧的C API,它直接接受函数指针。您不能将其用于其他任何对象,例如lambdas。相反,使用std::sort。

qsort是旧的C API,它直接接受函数指针。您不能将其用于其他任何对象,例如lambdas。相反,使用std::sort。

qsort的签名采用int*const void*,const void*类型的函数指针。您试图给它一个函数,它不是一个函数指针,但是一个封装某些东西的对象可能是一个函数ptr,可能是一个可调用为int,int的functor注意,它没有正确的签名,即使它是一个函数指针

qsort基本上是一个遗留函数,用于向后兼容c。 在C++中,我强烈建议忘记它,并使用STD::排序代替:

qsort的签名采用int*const void*、const void*类型的函数指针。您试图给它一个函数,它不是一个函数指针,但是一个封装某些东西的对象可能是一个函数ptr,可能是一个可调用为int,int的functor注意,它没有正确的签名,即使它是一个函数指针

qsort基本上是一个遗留函数,用于向后兼容c。 在C++中,我强烈建议忘记它,并使用STD::排序代替:



快活?!使用std::sort怎么样?@BoPersson-我试过std::sort-函数qsort的返回类型有问题吗?!使用std::sort怎么样?@BoPersson-我尝试了std::sort-functionAlmost right的返回类型有问题-它也需要一个非捕获lambda。不过,std::sort更有效。@msalters-我很难让lamdba函数的返回类型正常工作-我发布了更多代码top@szlamany:您的lambda正在捕获。非捕获lambda以[]开始,一个空捕获列表。几乎正确-它也需要一个非捕获lambda。不过,std::sort更有效。@msalters-我很难让lamdba函数的返回类型正常工作-我发布了更多代码top@szlamany:您的lambda正在捕获。非捕获lambda以[]开头,一个空的捕获列表OP@szlamany:您的lambda不正确。对于多于一行的lambda,您需要明确提到返回类型,对于std::sort,返回类型应该是bool而不是int。如果是bool,那么就不是常规比较器使用的旧的-1/0/1。什么是真,什么是假?我怎么会宣布lambda——我对C++完全陌生,因此语法会扼杀我!谢谢好的-这让我解决了我添加的返回数据类型问题:->bool现在是自动比较ort=[sortptrs,smarkers,emarkers,strearch]int arg1,int arg2->boolI实际上需要一个指针排序-我在从VB.Net托管代码传入的字符串中找到了一个单词的开始字节和结束字节数组。我还有一个指针数组,它包含1,2,3。。。我需要对指针进行排序。似乎我不能用std::sort做到这一点,所以我实现了自己的shell排序…好吧-我在OP@szlamany:您的lambda不正确。对于多于一行的lambda,您需要明确提到返回类型,对于std::sort,返回类型应该是bool而不是int。如果是bool,那么就不是常规比较器使用的旧的-1/0/1。什么是真,什么是假?我怎么会宣布lambda——我对C++完全陌生,因此语法会扼杀我!谢谢好的-这让我解决了我添加的返回数据类型问题:->bool现在是自动比较ort=[sortptrs,smarkers,emarkers,strearch]int arg1,int arg2->boolI实际上需要一个指针排序-我在从VB.Net托管代码传入的字符串中找到了一个单词的开始字节和结束字节数组。我还有一个指针数组,它包含1,2,3。。。我需要对指针进行排序。似乎我不能用std::sort实现这一点,所以我实现了自己的shell排序。。。
auto comparesort = [sortptrs, smarkers, emarkers, strSearch] (int arg1, int arg2)
{
    int a = 0;
    .
    .
    .
    return a;
};

std::sort(sortptrs, sortptrs + nKeywords, comparesort);
auto comparesort = [smarkers, emarkers, strSearch] (const  int& arg1, const int& arg2) { return false; }; 
//directly store the lambda, avoiding the overhead of creating a `function<...>`
std::sort(sortptrs, sortptrs + nKeywords, comparesort);