Так что я morelikely работает в перекрестных ссылок вопроса в CC кросс структура/функция ссылки
Здравствуйте, (я не смог записать его в первый по какой-то причине)
Основном этот код:
structA.h:
#pragma once
#include "structB.h"
typedef struct
{
B b;
}A;
structB.h:
#pragma once
#include "structA.h"
typedef struct
{
int field;
}B;
void func(A* a);
structB.c:
#include "structB.h"
void func(A* a)
{
}
производить follwing ошибки на VC2010:
structa.h (7): Ошибка C2016: C требует, чтобы структура или объединение имеет в
крайней мере один член structa.h (7): ошибка C2061: ошибка синтаксиса: идентификатор
'В' и т.д.
так, так как я только указатель А в FUNC (А * а) Я стараюсь делать опережающее объявление как это:
#pragma once
typedef struct A;
typedef struct
{
int field;
}B;
void func(A* a);
и добавить #include «structA.h» в structB.c
Однако это не работает, чтобы исправить это я должен изменить параметры в FUNC (а * а) FUNC (структура а * а) в прототипе и реализации ...
Но в этом случае я потерять цель typedef-my моих структур ...
Я знаю, что могу просто переместить функцию в другой файл, но функция связана с моей структурой, поэтому я хочу сохранить прототип в том же файле, что и моя структура. Теперь, возможно, это не хороший способ сделать что-то в C, я в основном используется для C++, поэтому я склонен думать на C++, когда делаю C, который часто бывает проблематичным ...
Кто-нибудь знает обходной путь? Большое спасибо.
В чем проблема? 'func' принимает указатель на' A'. Он может быть в 'structA.h'. Почему вы хотите заставить его «structB.h»? Похоже, что это будет иметь смысл в 'structA.h' из того, что вы опубликовали. Может быть, если вы поместите фактические имена вместо сделанных имен, таких как 'structA' и' structB', было бы более очевидно, что вы пытаетесь сделать? – user1118321
В моем случае B представляет игрока, а func - для updatePlayer(), для этого требуется указатель Game (A), в котором содержится несколько полезных сведений для обновления проигрывателя, а также в том, что Game-структура удерживает игрока. – Samir