Подтвердить что ты не робот

Переопределение; различные базовые типы (typedef struct)

У меня возникли проблемы с попыткой заставить структуры работать правильно, когда они определены в разных файлах. Насколько я могу судить, ошибка говорит мне, что структура определяется два раза. Я считаю, что, возможно, мне, возможно, понадобится использовать extern где-нибудь? Я пробовал экспериментировать и искать помощь в Google, но безрезультатно.

Любая помощь вообще будет оценена по достоинству, спасибо. Все четыре моих файла находятся ниже.

ФАЙЛ: Foo.h

typedef struct
{
    int number;
} my_struct;    // Redefinition; different basic types

ФАЙЛ: Foo.c

#include "Foo.h"
#include "Bar.h"
#include <stdio.h>

my_struct test;

int main(void)
{
    test.number = 0;
    DoSomething(&test);
    printf("Number is: ", &test.number);
}

ФАЙЛ: Bar.h

#include "Foo.h"

void DoSomething(my_struct *number);

ФАЙЛ: Bar.c

#include "Bar.h"

void DoSomething(my_struct *number)
{
    number->number = 10;
}
4b9b3361

Ответ 1

Проблема заключается в том, что у вас есть Foo.h в Bar.h. И как Foo.h, так и Bar.h включаются в main.cpp, что приводит к получению определения my_struct дважды в блоке перевода. Имейте директиву ifdef вокруг файла определения структуры. Попробуйте это -

#ifndef FOO_H
#define FOO_H

  typedef struct
  {
      int number;
  } my_struct;    

#endif