2012-10-14 3 views
-2
#include <stdio.h> 
typedef struct {int a; int b; int c;} F; 
typedef struct{ 
    int a; 
    int (*ptr)(F*); 
} A; 

int set_a(F * obj){ 
    obj->a = 1; 
} 
int main(){ 
    F a; 
    A b; 
    b.a = 0; 
    b.ptr = set_a; 
    b.ptr(&a); 
    printf("%d",a.a); 

    getchar(); 
} 

이 올바른 것 같다어느 쪽이 잘못 되었나요?

그런데 왜

#include <stdio.h> 
typedef struct{ 
    int a; 
    int (*ptr)(A*); 
} A; 

int set_a(A * obj){ 
    obj->a = 1; 
} 
int main(){ 
    A a; 
    a.a = 0; 
    a.ptr = set_a; 
    a.ptr(&a); 
    printf("%d",a.a); 

    getchar(); 
} 

이 잘못? 및

#include <stdio.h> 
typedef struct{ 
    int a; 
    int (*ptr)(A); 
} A; 

int set_a(A * obj){ 
    obj->a = 1; 
} 
int main(){ 
    A a; 
    a.a = 0; 
    a.ptr = set_a; 
    a.ptr(&a); 
    printf("%d",a.a); 

    getchar(); 
} 

정확합니까? 는 정말 선언 (시) 이전에 A 참조 2 층과 3 예에서

+5

문서가없고 변수 이름이 쓰레기라는 사실만으로도 오류가 _ALL_ 잘못된 것 같습니다. – paxdiablo

+1

@kim taeyun - 분명히 말하십시오. 1) 어떤 오류 메시지가 표시됩니까? 2) 정확하게 당신이 "틀린"것이라고 생각하는 것과 3) 무엇을하려는 것입니까? – paulsm4

+0

질문 제목을 좀 더 구체적으로 바꿀 수 있습니까? –

답변

3

Windows 7에서 비주얼 스튜디오 2012 감사

환경 언어 C를 궁금해 :

typedef struct{ 
    int a; 
    int (*ptr)(A*); // < the compiler doesn't know A at this point. 
} A; 

또한 세 번째 예에서는 을 수신하는 함수로 ptr을 선언하지만 A*을받는 set_a를 할당합니다.이 값은 유효하지 않습니다. 당신이 OK 그래서 이미 존재 F 참조 첫 번째 예에서

struct A; 
typedef struct A{ 
    int a; 
    int (*ptr)(struct A*); 
} A; 

:

당신은 전에 선언해야합니다.

+0

왜 그렇게 모호한 말로 질문을 좋아합니까? 적어도 오류 메시지와 해당 줄 #을 포함해야합니다. IMHO ... – paulsm4

+1

@ paulsm4 - 그게 모호하지 않은 것 같아서. 그러나 문제는 더 정교 할 수있었습니다. – MByD

+0

적어도 OP에는 오류 메시지 (예 : 'error :'A '에는'ptr '라는 멤버가 없음)와 해당 줄 번호가 있어야합니다. 나는 당신이 그에게 명확한 설명을 요구하지 않음으로써 해를 끼쳤다 고 생각합니다. IMHO ... – paulsm4