Problem z funkcją qsort.
Napisane: środa, 7 marca 2018, 14:31
Testuję sobie różne sposoby sortowania i w końcu natrafiłem na ten wbudowany w bibliotekę algorytm tj funkcja - qsort. Przekształacając przykład z wyroczni: http://www.cplusplus.com/reference/cstdlib/qsort/ do C++ Builder uzyskuję coś takiego:
Dostaję 2 errory:
[bcc32 Error] m_test_function.cpp(75): E2034 Cannot convert 'int (_fastcall * (_closure )(const void *,const void *))(const void *,const void *)' to 'int (*)(const void *,const void *)'
Full parser context
m_test_function.cpp(73): parsing: void _fastcall TForm1::Button3Click(TObject *)
[bcc32 Error] m_test_function.cpp(75): E2342 Type mismatch in parameter '__fcmp' (wanted 'int (*)(const void *,const void *)', got 'void')
Full parser context
m_test_function.cpp(73): parsing: void _fastcall TForm1::Button3Click(TObject *)
Nadmienię, że podany przykład oczywiście poprawnie kompiluje się w środowisku gcc/g++. Zakładam, że C++ Builder ma jakąś swoją własną definicję funkcji - qsort
PS. Również Visual C++ na tym samym "zastrajkował":
1>c:\users\luk\documents\c_plus\p_testuj4\p_testuj4\Form1.h(105) : error C3867: 'p_testuj4::Form1::compare': function call missing argument list; use '&p_testuj4::Form1::compare' to create a pointer to member
PS2. Czyli wszystko rozbiega się o "pointer"?
KOD cpp: UKRYJ
#include <stdlib.h>
KOD cpp: UKRYJ
int __fastcall TForm1::compare (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
void __fastcall TForm1::Button3Click(TObject *Sender)
{
int values[] = { 40, 10, 100, 90, 20, 25 };
qsort (values, 6, sizeof(int), compare);
}
{
return ( *(int*)a - *(int*)b );
}
void __fastcall TForm1::Button3Click(TObject *Sender)
{
int values[] = { 40, 10, 100, 90, 20, 25 };
qsort (values, 6, sizeof(int), compare);
}
Dostaję 2 errory:
[bcc32 Error] m_test_function.cpp(75): E2034 Cannot convert 'int (_fastcall * (_closure )(const void *,const void *))(const void *,const void *)' to 'int (*)(const void *,const void *)'
Full parser context
m_test_function.cpp(73): parsing: void _fastcall TForm1::Button3Click(TObject *)
[bcc32 Error] m_test_function.cpp(75): E2342 Type mismatch in parameter '__fcmp' (wanted 'int (*)(const void *,const void *)', got 'void')
Full parser context
m_test_function.cpp(73): parsing: void _fastcall TForm1::Button3Click(TObject *)
Nadmienię, że podany przykład oczywiście poprawnie kompiluje się w środowisku gcc/g++. Zakładam, że C++ Builder ma jakąś swoją własną definicję funkcji - qsort
PS. Również Visual C++ na tym samym "zastrajkował":
1>c:\users\luk\documents\c_plus\p_testuj4\p_testuj4\Form1.h(105) : error C3867: 'p_testuj4::Form1::compare': function call missing argument list; use '&p_testuj4::Form1::compare' to create a pointer to member
PS2. Czyli wszystko rozbiega się o "pointer"?