Проблема в том, что вы изменяете объявление в структуре X.
Итак, внутри структуры X вы говорите компилятору, что структура имеет функцию, которая получает что-то типа X, но подождите минуту, тип X не полностью определен в этой точке!
Вы не можете использовать неполный тип в качестве параметра для функции f, но вы можете использовать адрес неполного типа, то есть X *.
На заметке на сайте для вас будет очень важно повысить коэффициент принятия, чтобы вы получали ответы на свои будущие вопросы и имели важное значение для моего эго, если я получил правильный ответ