在 Objective-C 中实施 qsort
Implementing qsort in Objective-C
我正在尝试使用 qsort 根据 this website 的建议按降序对 C 数组进行排序。
相关代码如下:
int x = 3;
- (IBAction)CaptureButton:(id)sender
{
x++;
if (x % 3 == 1)
{
int areas[detectedBlobs.size()];
for (int i = 0; i < detectedBlobs.size(); i++)
{
areas[i] = detectedBlobs[i].getWidth() * detectedBlobs[i].getHeight();
}
int compareInts(void const *item1, void const *item2)
{ // first error
int const *int1 = item1;
int const *int2 = item2;
return (*int2 - *int1);
}
qsort(areas, detectedBlobs.size(), sizeof(int), compareInts); // second error
}
}
这是我遇到的两个错误:
第一个错误:
Function definition is not allowed here
第二个错误:
Use of undeclared identifier 'compareInts'
如果我不能在这里定义比较器(compareInts)函数,我必须在哪里定义它?另外,如何让 qsort 函数识别比较器?
Objective-C 不允许在方法内部定义函数。将 compareInts
移到方法之外,并使其 static
对其他翻译单元隐藏:
static int compareInts(const void* item1, const void* item2) {
const int* int1 = (const int*)item1;
const int* int2 = (const int*)item2;
return (*int2 - *int1);
}
- (IBAction)CaptureButton:(id)sender {
x++;
if (x % 3 == 1) {
int areas[detectedBlobs.size()];
for (int i = 0; i < detectedBlobs.size(); i++) {
areas[i] = detectedBlobs[i].getWidth() * detectedBlobs[i].getHeight();
}
qsort(areas, detectedBlobs.size(), sizeof(int), compareInts);
}
}
我正在尝试使用 qsort 根据 this website 的建议按降序对 C 数组进行排序。
相关代码如下:
int x = 3;
- (IBAction)CaptureButton:(id)sender
{
x++;
if (x % 3 == 1)
{
int areas[detectedBlobs.size()];
for (int i = 0; i < detectedBlobs.size(); i++)
{
areas[i] = detectedBlobs[i].getWidth() * detectedBlobs[i].getHeight();
}
int compareInts(void const *item1, void const *item2)
{ // first error
int const *int1 = item1;
int const *int2 = item2;
return (*int2 - *int1);
}
qsort(areas, detectedBlobs.size(), sizeof(int), compareInts); // second error
}
}
这是我遇到的两个错误:
第一个错误:
Function definition is not allowed here
第二个错误:
Use of undeclared identifier 'compareInts'
如果我不能在这里定义比较器(compareInts)函数,我必须在哪里定义它?另外,如何让 qsort 函数识别比较器?
Objective-C 不允许在方法内部定义函数。将 compareInts
移到方法之外,并使其 static
对其他翻译单元隐藏:
static int compareInts(const void* item1, const void* item2) {
const int* int1 = (const int*)item1;
const int* int2 = (const int*)item2;
return (*int2 - *int1);
}
- (IBAction)CaptureButton:(id)sender {
x++;
if (x % 3 == 1) {
int areas[detectedBlobs.size()];
for (int i = 0; i < detectedBlobs.size(); i++) {
areas[i] = detectedBlobs[i].getWidth() * detectedBlobs[i].getHeight();
}
qsort(areas, detectedBlobs.size(), sizeof(int), compareInts);
}
}