Допустим, у нас есть два структур в исходном файле:Разыменование указателя на неполный тип
struct B {
int x;
};
struct A {
beta y;
};
В эквивалентном заголовочном файле мы имеем эти:
typedef B* beta;
typedef A* alpha;
Кроме того, эти прототипы функций определены в файле заголовка:
printAplha(alpha);
compare(const beta, const beta);
В основном файле я включил конкретный заголовочный файл, и код выглядит l икэ это:
alpha one, two;
printAlpha(one);
printAlpha(two);
//everything works fine up to here
compare(one->y, two->y);
В последней строке кода я получаю
main.c:37:20: error: dereferencing pointer to incomplete type
main.c:37:33: error: dereferencing pointer to incomplete type
Я знаю, что я могу использовать функцию-оболочку для compare
, аргументы которых будет иметь тип alpha
(как аргументы функции сравнения не могут быть изменены - это рекурсивный), но я хотел бы посмотреть, есть ли другое решение и почему это происходит.
Примечание: определения структуры были записаны в исходный файл для шифрования их внутренней структуры.
Почему мой вопрос ниспровергнут? Может ли кто-нибудь объяснить причину, чтобы узнать, что я сделал неправильно? – Chris