Вопрос по c, typedef, struct, extern – переопределение; различные базовые типы (typedef struct)

10

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

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

FILE: Foo.h

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

FILE: 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);
}

FILE: Bar.h

#include "Foo.h"

void DoSomething(my_struct *number);

FILE: Bar.c

#include "Bar.h"

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

Ваш Ответ

1   ответ
14

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
Рад, что смог помочь. Надеюсь, вы поняли, что делаете неправильно. Узнайте о работе препроцессора, компилятора и компоновщика.
Круто, отлично работает сейчас; Спасибо большое! Tundra Fizz
Да, я также должен был с самого начала очистить заголовочные файлы. Я слышал, что это хорошая практика, чтобы привыкнуть к этому. Tundra Fizz

Похожие вопросы