2013-05-10 3 views
0

의 멤버 변수를 할당 헤더 파일 사용하는 메신저입니다예상 식별자 또는 '('오류 구조체 배열 여기

struct room* create_room() 
{ 
    for(i = 0; i < num_room; i++) 
    { 
     room[i] = (struct room*)malloc(sizeof(room)); 
     printf("input room details\n"); 
     fgets(input, max_length, stdin); 
     sscanf(input, "%s %i %i", room_name, &dnuts, &mshakes); 

     strcpy(room[i].name, room_name); //assign name 
     room[i].num_doughnuts = dnuts; //assign doughnuts 
     room[i].num_milkshakes = mshakes; //assign milkshakes 


    } 
    return 0; 

} 

그리고 필자는 방 선언 create_room()이 호출되기 전에 main 함수의 struct

struct room room[num_room]; 

Im 문자열을 저장할 사용자 입력이 있어야합니다. 사용자가 정의한 방의 양을 나타내는 두 개의 정수.

나는이 라인 expected identifier or '(' 말에 오류가 점점 계속 :

 room[i] = (struct room*)malloc(sizeof(room)); 
     room[i].num_doughnuts = dnuts; //assign doughnuts 
     room[i].num_milkshakes = mshakes; //assign milkshakes 

나는 또한 받고 있어요 :

 strcpy(room[i].name, room_name); //assign name 

: 예기치 않은 형식 '방'의 이름을 지정하려고 예상 식을 내가 선언 한 방식에 문제가있다. 그러나 나는 무엇을 모르고있다. 나는이 문제들 중 몇 가지를 보았고 몇 가지 다른 유형의 솔루션을 시도했지만 비슷한 오류가 계속 발생했습니다.

누구든지이 부분을 좀 밝힐 수 있습니까? 나는 정말로 붙어있다! 많은 감사를드립니다.

피실험자가 생성 된 후에이 모든 회의실을 이중 연결 목록에 저장해야하는 경우 포털 [4]이 다른 회의실에 대한 포인터를 저장해야합니다. 그게 내 질문에 어떤 베어링이 있는지 모르겠지만 여분의 정보는 사람을 해칠 수 없어!

typedef struct room room; 

그것은 재미 일 당신이 당신의 구조체를 참조하려고 할 때마다를하고있어 :

답변

0

나는 문제가이 라인이다 생각한다. 어쨌든 사용하지 않으므로 그냥 제거하십시오.

+0

유감스럽게도 나는 헤더 파일을 변경할 수 없다 : ( – user2334829

+0

또한 typedef는 방 * portal [4] 행과 관련이 있다고 의심된다 ... – user2334829

+0

그 경우,'struct room '의 모든 항목을 'room '은 이미'struct room'의 별칭이므로 ('struct struct room'이됩니다) – Gian

0

당신은 혼란 방식으로 이름이 "방"을 재사용하는

구조체 룸 객실 [num_room]/* 방 & 방을 다시 보시겠습니까? */

오전 그것이 심지어 다른 변수 이름 또한

을 사용하시기 바랍니다 컴파일 놀라게하는 CONST 또는 #DEFINE는 num_room입니까? 방의 배열을 정의하고 있으며 create_room에서 방당 malloc을 수행하고 있습니다. 나는 그것이 힌트를 가지고 당신이 (의견) 특정 질문이 있으면 내게 물어 주시기 작동하게, 신속하고 더러운 방법으로 너무

을 확인하십시오 :

#include <stdio.h> 


typedef struct room room; 
struct room { 
char name[21]; 
int num_doughnuts; 
int num_milkshakes; 
room* portal[4]; 
}; 

int num_room = 2; 

struct room* create_rooms() 
{ 

     int i; 

    /* Create a pointer to rooms */ 
    struct room *rooms; 
    char input[256], room_name[256]; 
    int dnuts, mshakes; 
    int max_length = 256; 


    /* Allocate memory for all rooms */ 
    rooms = malloc(num_room * sizeof(room)); 


    for(i = 0; i < num_room; i++) 
    { 
     printf("input room details\n"); 
     fgets(input, max_length, stdin); 
     sscanf(input, "%s %i %i", room_name, &dnuts, &mshakes); 

     strcpy(rooms[i].name, room_name); //assign name 
     rooms[i].num_doughnuts = dnuts; //assign doughnuts 
     rooms[i].num_milkshakes = mshakes; //assign milkshakes 


    } 
    return rooms; 

} 

main() 
{ 
     struct room *rooms; 
     int j; 

     rooms = create_rooms(); 

     for (j=0; j < num_room; j++) 
     { 
       printf("%s, %d %d\n", rooms[j].name, rooms[j].num_doughnuts, rooms[j].num_milkshakes); 
     } 

     /* free */ 
     free (rooms); 
} 
+0

오류가 컴파일되지 않습니다. num_room은 처음부터 사용자 정의가되어 있습니다. 나머지 프로그램 전체에서 동일하게 유지됩니다. 헤더 파일의 typedef로 인해 [num_room]을 다른 것으로 변경할 수 없습니다. (오류가있는 다른 것으로 변경하면 "알 수없는 유형 이름 'rooms'; 당신이 '방'을 의미? " 당신이 malloc에 ​​문제에 대한 자세한 될 수뿐만 아니라? 가 확실히 나는 각 방을 malloc에 ​​필요 했습니까? – user2334829

+0

변수 또는 정의 # num_rooms인가? – Sudhee

+0

변수를하지 정의 # – user2334829

1

을 당신은 그 배열을 쓰기 room main 함수에서 선언됩니다. 그런 다음 create_rooms에 표시되지 않습니다. 즉, 거기에 room이 표시되고 유형이에 의해 선언 된 것은 typedef이며 컴파일러가 불평하는 이유입니다.이미 typedef으로 선언 된 형태의 글로벌 식별자 room을 사용했습니다 당신이, room외부 주요 배열을 선언 할 수 없습니다

참고. (왜 main 내 선언은 컴파일 오류를 생성하지 않습니다 주 내에서 수행하는 경우, 로컬 선언은 유형 roommain 내 보이지 않는 세계 하나, 즉 숨 깁니다.)

솔루션 : main하고 이름을 외부 배열을 선언 다르게.

관련 문제