在Xcode iOS项目中使用C头和实现文件

时间:2013-08-17 21:33:27

标签: ios c xcode header

我正在尝试在Xcode iOS / Objective-C项目中使用单独的C头和实现文件 我想使用我在main.m中实现的方法,但是我得到了这些错误:

enter image description here Full size here

我在main.m中包含了user.h

请注意,在user.c中为HelloWorld选择了目标成员资格。当我取消选择此错误时,错误消失了。但是当我尝试运行应用程序时,我在编译时遇到这些错误: enter image description here
Full size here

当我在main.m中实现struct和method时,它编译并运行得很好。但我不明白为什么我不能在一个单独的文件中使用这个特定的代码?

源代码:
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]));
    }
}

2 个答案:

答案 0 :(得分:1)

尝试在user.c中包含user.h,就像包含stdio.h。

答案 1 :(得分:1)

这些错误是因为user.c中引用的两种类型尚未在其导入的标头中声明:User(在user.h中定义)和uint (在<sys/types.h>中定义)。要解决这些错误,请在user.c内添加以下内容:

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