Ошибка здесь:
const xyz point1 = *(const xyz *)p1;
const xyz point2 = *(const xyz *)p2;
^ ^^^
| wrong type
|
wrong dereference
Просто сделайте
const Coordinates * point1 = (const Coordinates *)p1;
const Coordinates * point2 = (const Coordinates *)p2;
и избегайте typedef указателей.Это сбивает с толку и подвержено ошибкам.
Так что удалите это:
typedef Coordinates * xyz;
Если вы действительно, действительно хотите указатель typedef, вам следует, по крайней мере, использовать значимое имя, то есть
typedef Coordinates * CoordinatesPtr;
Далее вам нужно изменить sizeof(xyz)
на sizeof *xyz