我不断收到错误消息:
invalid application of 'sizeof' to incomplete type 'struct customer'
我不知道如何解决这个问题。谁能建议我减轻这个问题的方法?
typedef struct
{
int acc_number;
char first_name[30];
char last_name[30];
char address [50];``
int contact_info;
float acc_bal;
} customer ;
struct employee
{
int emp_id;
char first_name[30];
char last_name[30];
char address [50];
char job_title [30];
int contact_info;
};
int main()
{
FILE *myPtr;
customer customer = { 0.0 };
if ( ( myPtr = fopen( "credit.dat", "r+" ) ) == NULL )
printf( "File could not be opened.\n" );
else {
printf( "Enter account number"
" ( 1 to 100, 0 to end input )\n? " );
scanf( "%d", &customer.acc_number);
while ( customer.acc_number != 0 ) {
printf( "Enter lastname, firstname, balance\n? " );
fscanf( stdin, "%s%s%f", customer.last_name,
customer.first_name, &customer.acc_bal );
fseek( myPtr, ( customer.acc_number - 1 ) *
sizeof (struct customer ), SEEK_SET );
fwrite( &customer, sizeof ( struct customer ), 1,
myPtr );
printf( "Enter account number\n? " );
scanf( "%d", &customer.acc_number );
}
fclose(myPtr);
}
return 0;
}
答案 0 :(得分:4)
您没有struct customer
。
您的结构没有标记,别名为costumer
。
尝试
typedef struct costumer { /* ... */ } costumer;
// <--tag-> <-alias->
// <--type name-->
// <-------------type---------->
或者,甚至可能更好,将typedef
从代码中删除。
答案 1 :(得分:2)
正如@pmg指出为什么以下失败:代码没有struct customer
。
fwrite( &customer, sizeof ( struct customer ), 1, myPtr );
变量customer
的声明,虽然合法使用&#34;客户&#34;以两种不同的方式。
customer customer = { 0.0 };
建议使用带有变量名称的sizeof
而不是类型名称。还可以使用区分类型和变量名称。
customer current_customer = { 0.0 };
fwrite( ¤t_customer, sizeof current_customer, 1, myPtr );
即使有人在声明变量时更喜欢不使用typedef
并使用struct
,仍然建议使用sizeof
使用变量名而不是类型。
struct customer {
int acc_number;
...
float acc_bal;
};
struct customer current_customer = { 0.0 };
fwrite( ¤t_customer, sizeof current_customer, 1, myPtr );