2013-07-28 5 views
3

Я пытаюсь передать struct указатель в функции. У меня есть typedef в файле file1.h и хочу включать этот заголовок в файл file2.c, потому что file2.h нужен только указатель. В C++ я бы просто написал, как я здесь, но с использованием C99 он не работает. Если у кого-то есть предложения, как передать указатель struct без полного определения, он будет очень признателен. Компилятор - gcc.Срочное объявление структуры в заголовке

file1.h

typedef struct 
{ 
    ... 
} NEW_STRUCT;

file2.h

struct NEW_STRUCT; 

void foo(NEW_STRUCT *new_struct); //error: unknown type name 'NEW_STRUCT'

file2.c

#include "file2.h" 

#include "file1.h" 

void foo(NEW_STRUCT *new_struct) 
{ 
    ... 
}
+4

* "не работает". * Объясните. Получили ли вы ошибку компилятора? ошибка линкера? кратковременное крах? Что случилось? – abelenky

+0

Извините, это забыл. Он не компилирует ни то, ни другое, и если я добавлю аргумент 'struct' в функцию, тогда ошибка изменится на« function »foo 'аргумент типа missmatch». – PovilasG

ответ

9

Я думаю, вы просто должны назвать свою структуру, и сделать вышеописанную декларацию он и после re typedef это.

Первый файл:

typedef struct structName {} t_structName; 

Второй файл:

struct stuctName; 
    typedef struct structName t_structName 
+0

Надеюсь на решение, не связанное с повторным типом, но я должен принять это. – PovilasG

0

Вы можете попробовать это:

file1.h

typedef struct _NEW_STRUCT // changed! 
{ 
    ... 
} NEW_STRUCT; 

file2.h

struct _NEW_STRUCT; // changed! 

void foo(struct _NEW_STRUCT *new_struct); // changed! 

file2.c

#include "file2.h" 
#include "file1.h" 

void foo(NEW_STRUCT *new_struct) 
{ 
    ... 
} 
Смежные вопросы