struct中的sizeof错误

时间:2014-04-27 18:16:09

标签: c struct

我不断收到错误消息:

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;

}

2 个答案:

答案 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( &current_customer, sizeof current_customer, 1, myPtr );

即使有人在声明变量时更喜欢不使用typedef并使用struct,仍然建议使用sizeof使用变量名而不是类型。

struct customer {
  int acc_number;
  ...
  float acc_bal;
};

struct customer current_customer = { 0.0 };
fwrite( &current_customer, sizeof current_customer, 1, myPtr );