2013-08-17 2 views
1

Xcode iOS/Objective-C 프로젝트에서 별도의 C 헤더 및 구현 파일을 사용하려고합니다.
은 내가 main.m에서 구현하는 방법을 사용하고 싶지만 나는 이러한 오류를 얻을 : 나는 main.m에 user.h 포함Xcode iOS 프로젝트에서 C 헤더 및 구현 파일 사용

참고 한

enter image description here Full size here

을 대상 회원 HelloWorld 용 user.c에서 선택됩니다. 이 선택을 취소하면 오류가 사라집니다. 나는 응용 프로그램을 실행하려고 할 때, 나는 컴파일 시간에 이러한 오류를 얻을 : enter image description here
Full size here

내가 컴파일과 잘 실행 main.m의 구조체 및 방법을 구현 . 하지만 왜 내가이 특별한 코드를 별도의 파일로 사용할 수 없는지 모르겠다.

소스 코드 :
user.h

#ifndef HelloWorld_user_h 
#define HelloWorld_user_h 

typedef struct { 
    char *name; 
    int age; 
    char sex; 
} User; //sizeof(User) = 16 bytes 

void CreateAndDisplay(User *usr, char *name, int age, char sex); 

#endif 

user.c

#include <stdio.h> 
#include <stdlib.h> 

void CreateAndDisplay(User *usr, char *name, int age, char sex) { 
    usr->name = name; 
    usr->age = age; 
    usr->sex = sex; 

    printf("User address -> value:\n"); 
    printf("Name:\t%u\t->\t%s\n", (uint)usr, *&usr->name); 
    printf("Age:\t%u\t->\t%i\n", (uint)&usr->age, *&usr->age); 
    printf("Sex:\t%u\t->\t%c\n\n", (uint)&usr->sex, *&usr->sex); 

    printf("User has a size of %li bytes in memory", sizeof(*usr)); 
} 

main.m

#import <UIKit/UIKit.h> 

#import "HelloWorldAppDelegate.h" 

#include <stdio.h> 
#include <stdlib.h> 

#include "user.h" 

int main(int argc, char *argv[]) 
{ 
    User user1; 
    CreateAndDisplay(&user1, "John Doe", 24, 'm'); 

    @autoreleasepool { 
     return UIApplicationMain(argc, argv, nil, NSStringFromClass([HelloWorldAppDelegate class])); 
    } 
} 
+1

이 (http://puu.sh/44eMG.png) 당신은'#INCLUDE을 시도 할 수도 " user.c "에있는"user.h ". 'user.c'의'#include '파일 목록을보고 있습니다. 거기에는'#include '이 있으므로 컴파일러는'User'가 무엇인지 전혀 알지 못합니다. – WhozCraig

+0

@QuantumHive 귀하의 스크린 샷을 직접 귀하의 게시물로 옮겼습니다. 나중에 코드 블록 안에 질문에 코드를 넣으십시오. 질문을 독자적으로 작성하고 다른 사람들이 직접 코드를 컴파일, 테스트 및 편집하는 것이 더 쉽습니다. 감사! –

+0

죄송합니다, 지금 코드를 추가하겠습니다. – QuantumHive

답변

1

이러한 오류가 있습니다. 다음을 추가해야 user.c 내부에 이러한 오류를 해결하려면 포함하여 [스크린 샷] 것만으로 판단

#include "user.h" 
#include <sys/types.h> 
1

stdio.h를 포함하는 것처럼 user.c에 user.h를 포함 시키십시오. User (<sys/types.h>에 정의) 및 uint (user.h에 정의) :이 가져 헤더에 선언되지 않은 user.c에 언급 된 두 가지 유형이 있기 때문에

+0

흠, 고마워. 나는 C 구현 파일에 헤더 파일을 포함시켜야한다는 것을 몰랐다. 하나의 오류가 사라졌습니다 : 이제 구조체를 인식합니다. 그러나 나머지 세 가지 오류는 여전히 남아 있습니다. _ "선언되지 않은 식별자 'uint'사용 : 'int'를 의미합니까?"_ _uint **를 사용할 수없는 이유는 무엇입니까? – QuantumHive

+0

나머지 오류는 해결되었습니다. 분명히 ** uint **는 _typedef_이며 C의 표준 유형이 아니므로 _.c_ 파일에서 인식하지 못하는 이유는 _m_ 파일에서 인식합니다. 정의는 [link] (http://puu.sh/44hm9.png)를 참조하십시오. 오류를 해결 한 _user.c_에서 ** uint **를 ** unsigned int **로 변경했습니다. ** unsigned int **는 ANSI C 언어의 표준 유형입니다. – QuantumHive

관련 문제