2015-02-28 2 views
-1

У меня возникли проблемы с поиском моей ошибки. Вот определение в structures.hЧто в этом плохого? C

typedef struct book { 
    bank_account_t **accounts; 
    transaction_t **transactions; 
} book_t; 

А вот в functions.c где я включил заголовок и попытаться использовать тип book_t

#include "structures.h" 

void load_book(book_t *book) { 

} 

Но я получаю эту ошибку

functions.c:10:16: error: unknown type name ‘book_t’ 
void load_book(book_t *book) { 
       ^

редактирует с дополнительным кодом ниже:

В моем main файл я приказываю мои .h файлы как так

#include "structures.h" 
#include "functions.h" 

structures.h

#ifndef STRUCTURES_H 
# define STRUCTURES_H 


typedef struct bank_account { 
    char *name; 
    int amount; 
} bank_account_t; 

typedef struct transaction { 
    char *name; 
    int amount; 
} transaction_t; 

typedef struct book { 
    bank_account_t **accounts; 
    transaction_t **transactions; 
} book_t; 

#endif 

function.c

#include <stdio.h> 

#include "functions.h" 
#include "structures.h" 
#include "bank_account.h" 
#include "transaction.h" 

void load_book(book_t *book) { 

} 

void init_book() { 

} 

bank_account.h

#ifndef BANK_ACCOUNT_H 
# define BANK_ACCOUNT_H 

void init_new_bank(); 
void deinit_new_bank(); 

#endif 

transaction.h

#ifndef TRANSACTION_H 
# define TRANSACTION_H 

#endif 
+0

is not book_t действует только в структурах.h? –

+0

очень странный ... есть ли дополнительная информация? как вы строите программу? и, пожалуйста, опубликуйте весь 'structure.h' ... –

+0

Показать всю программу. Когда я скомпилирую его с помощью gcc как файла C, он отлично работает, как и должно быть. Где указаны определения для bank_account и транзакции? – Devolus

ответ

2

В functions.c переставлять порядок таков:

#include "functions.h" 
#include "structures.h" 

быть

#include "structures.h" 
#include "functions.h" 

искусный Дело в том, что ошибка происхождение сообщения от functions.c не из functions.h.

Предполагая, что протойтет до load_book(book_t *) в functions.h, его необходимо знать о book_t.

Таким образом, оптимальным решением этой проблемы было бы включить в structures.hfunctions.h (а также уже указывал MarkU'sanswer).

Изучаемый урок: Всегда (и только) включать то, что вам нужно и где оно вам нужно. Избегайте (subtile) зависимостей.

+0

Это было бы мое предположение. – Devolus

+0

Отличный улов ... –

+0

Не работает. 'structure.h' - это первый заголовок, который я вызываю, и он не включает' functions.h' – rangeme

3

Я думаю, что проблема должна быть в functions.h (которая не включена в исходное сообщение).

functions.h

#ifndef FUNCTIONS_H 
# define FUNCTIONS_H 

/* [MarkU] required: include definition of book_t */ 
#include "structures.h" 

void load_book(book_t *book); 
void init_book(); 

#endif 

Без #include structures.h нет никакого определения типа boot_t.

Построен и проверен с помощью mingw32-gcc 4.7.2. Опуская #include, я вижу сообщение об ошибке.