2011-02-04 6 views
3

인수와 동일한 구조체를 사용하는 함수 포인터가있는 구조체를 만들려고합니다. 나는이 순간을 가지고있다.동일한 인수 유형을 가진 구조체의 함수 포인터

typedef struct sharedData 
{ 
    sem_t* forks; 
    int id; 
    void (*forkFunc)(sharedData*); 
}; 

내가 얻고

error: expected ‘)’ before ‘*’ token

같은 오류와

warning: no semicolon at end of struct or union 
warning: useless storage class specifier in empty declaration 

같은 경고는 내가 잘못 여기서 뭐하는 거지?

+2

대신 struct sharedData *를 쓰고 싶습니까? –

답변

6

문제는 당신이 struct 키워드를 필요로하지 않는 새로운 struct을 소개 typedef struct를 사용할 때, 당신은 struct의 선언 내부의 typedef -ed 이름을 참조 할 수 없다는 것입니다. 대신 구조체의 전체 이름을 사용해야합니다. 예를 들면 : 당신이 struct sharedData를 호출하여 이름을 부여하지 않았기 때문에

typedef struct sharedData 
{ 
    sem_t* forks; 
    int id; 
    void (*forkFunc)(struct sharedData*); 
}; 

또한, 당신의 typedef 문은 현재 유효하지 않습니다. 다음과 같이 될 것입니다 해결하는 한 가지 방법은 :

typedef struct sharedData 
{ 
    sem_t* forks; 
    int id; 
    void (*forkFunc)(struct sharedData*); 
} sharedData; 

지금, 당신은 전체 이름 struct sharedData 또는 약식 이름 sharedData하여 구조체를 참조 할 수 있습니다.

+2

마지막 밑줄을 버립니다. 그것은 단지 추악하고 쓸모없는 것입니다. struct 태그와 typedef에 같은 이름을 사용하는 것은 완벽하게 유효합니다. –

+0

@R ..- 멋지다! 나는 그것을 몰랐다. 원래 게시물을 업데이트합니다. – templatetypedef