2016-05-10 3 views
-2

Я ищу ошибку в моем коде (на C), и я ничего не нахожу. Я просмотрел много блогов и попробовал много советов, но ничего не помогло.
Я закодирован, что:Указатель разыменования на неполный тип - typedef struct

typedef struct Account_t *Account; 
struct Account_t { 
    Customer customer; 
    Realtor realtor; 
    Offer offer; 
}; 

в то время как Realtor, клиент и предложение хорошо определены и включен в файл .h. Я получаю сообщение об ошибке: «разыменования указателя к неполному типу" STRUCT Account_t», когда я пишу:

Account account = malloc(sizeof(*account)); 

Пожалуйста, помогите мне найти проблему!

+1

Это должно быть действительно (см. [Здесь] (http://ideone.com/v19S9v)). Пожалуйста, напишите полный пример. По какой-то причине компилятор не видел определения структуры во время использования 'malloc'. – molbdnilo

+1

Показать определение «Клиент», «Риэлтор» и «Предложение». – BLUEPIXY

+0

_... в то время как риэлтор, клиент и предложение хорошо определены ..._ Вы можете включить их в свой пост? – ryyker

ответ

-3

Я бы сказал, что вам нужно сделать что-то вроде этого:

счета = (счета) таНос счета (SizeOf (* счет));

+3

'sizeof (account)' будет возвращать размер указателя (8 или 4 байта). 'sizeof (* account)' будет возвращать 'sizeof (Account_t)' –

+0

На самом деле это было именно намерение. Пользователь, который разместил вопрос, не сформулировал это явно. – armagedescu

-2
typedef struct Account_t *Account; 
struct Account_t { 
    Customer customer; 
    Realtor realtor; 
    Offer offer; 
}; 

В первой строке определяется Account быть указателем на struct Account_t. Однако в этот момент struct Account_t не определено.

Вы должны сначала определить struct, а затем typedef.

struct Account_t { 
    Customer customer; 
    Realtor realtor; 
    Offer offer; 
}; 
typedef struct Account_t *Account; 

Теперь вы можете с радостью использовать Account.

+5

Вам не обязательно. Заказ не имеет значения. – 2501

0

Я попробовал код. И у меня была такая же проблема, как и вы.

Проблема с вашим кодом, когда вы выделяете структуру в куче, возвращаемое значение неверно назначено, потому что malloc возвращает указатель.

мой код выглядит следующим образом:

Account* account = (account*)malloc(sizeof(account)); 

И вторая вещь: Как определение типа I не определяют структуру как указатель.

typedef struct account_t Account; 

Попробуйте это, я надеюсь, что эта информация полезна!