Ладно, ребята, мы все знаем, что есть много вопросов по typedef / struct, но я чувствую, что это что-то вроде ума.
Я моделирую соседние взаимодействия кристаллической решетки, используя строго C. У меня есть структура, называемая "ball_struct", которую я определил как "ball". Структура содержит указатель на список ball_structs (поскольку я не мог использовать имя typedef до его собственного объявления), который шар считает своими соседями.
Итак, вот подвох: Я хочу добавить шары в этот список соседей ball_struct. Когда я компилирую (в Visual Studio 2009 нет поддержки CLR), я получаю:
ошибка C2440: '=': невозможно преобразовать из 'ball *' в 'ball_struct'
Я не удивлен, но я в тупике. Есть ли способ привести typedef обратно к соответствующей структуре? Если нет, могу ли я в любом случае добавить «ball» в список «ball_struct», чтобы мне не пришлось удалять ключевые слова typedef и вставлять «struct» во всем коде? Вот код, о котором идет речь:
Структура / typedef:
typedef struct ball_struct
{
double mass;
vector pos, vel, acc;
/* keep list of neighbors and its size */
struct ball_struct *neighbors;
int numNeighbors;
} ball;
И ошибочная функция:
/* adds ball reference to the neighbor list of the target */
void addNeighbor(ball *target, ball *neighbor)
{
int n = target->numNeighbors;
target->neighbors[n] = neighbor; // error C2440
target->numNeighbors = n+1;
}
Спасибо, любая помощь приветствуется. Помните, пожалуйста, только решения для C.