Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: взаимное предопределение в C
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
megajohn
есть указатель на функцию
и определение структуры, где в качестве поля структуры используется этот указатель на функцию
Код
typedef void(*func_ptr) (void* arg, int len );

typedef struct{
int arg2;
func_ptr func;
}Ttest;

это работает
http://codepad.org/XxLWO05k

но нужно в аргумент вызова функции добавить указатель на структуру, типо

Код
typedef void(*func_ptr) (void* arg, int len, Ttest* src );

typedef struct{
int arg2; // dummy
func_ptr func;
}Ttest;

и компилятор не знает Ttest. Как бы предопределить ? typedef struct Ttest; // типа predefinition не помог
http://codepad.org/NY8QUeim
halfdoom
Код
struct test;

typedef void(*func_ptr) (void* arg, int len, struct test *src );

megajohn
то есть определить сначала полностью все поля test а потом тоже самое для Ttest ? Это же не спортивно
halfdoom
Расширим и углубим:

Код
struct test;

typedef void(*func_ptr) (void* arg, int len, struct test *src );

typedef struct test {
    int arg2; // dummy
    func_ptr func;
} Ttest;

XVR
Цитата(megajohn @ Nov 8 2013, 13:03) *
то есть определить сначала полностью все поля test а потом тоже самое для Ttest ?
Нет. Можно сделать так:
Код
typedef void(*func_ptr) (void* arg, int len, struct test* src );

typedef struct test {
int arg2; // dummy
func_ptr func;
}Ttest;

Или даже так -
Код
typedef void(*func_ptr) (void* arg, int len, struct Ttest* src );

typedef struct Ttest {
int arg2; // dummy
func_ptr func;
}Ttest;

megajohn
благодарю halfdoom и XVR, все варианты работают, но остановился на четвертом ( почти что третий, только вот не знаю все ли компиляторы проглотят )
Код
typedef void(*func_ptr) (void* arg, int len, struct Ttest* src );

typedef struct {
int arg2; // dummy
func_ptr func;
}Ttest;


UPD: в CCS 5 сработал только вариант halfdoom
XVR
Цитата(megajohn @ Nov 8 2013, 14:23) *
только вот не знаю все ли компиляторы проглотят )
С++ может не проглотить. Добавьте Ttest после typedef struct и перед открывающей фигурной скобкой.

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.