Objective c不能分离接口和实现文件



我在windows上使用gnustep来实现objective-c。如果我将类的接口和实现文件与主文件放在一起,它编译时不会出错,并给出预期的输出。

示例如下:

// File "classA.h"
#import <Foundation/Foundation.h>
@interface classA: NSObject
{
    int a;
}
-(void) print;
@end

// File "classA.m"
#import "classA.h"
@implementation classA
-(void) print
{
    a = 10;
    NSLog(@"a = %i", a);
}
@end

// File "test.m"
#import "classA.h"
int main(int argc, char *argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    NSLog(@"start");
    classA *objA = [[classA alloc] init];
    [objA print];
    [objA release];
    NSLog(@"done");
    [pool drain];
    return 0;
}

但是,如果我把接口和实现文件分开,在编译时使用以下命令

gcc `gnustep-config --objc-flags` -o program program.m -L /GNUstep/System/Library/Libraries -lobjc -lgnustep-base

我得到以下错误

undefined reference to `__objc_class_name_myNewClass'
collect2: ld returned 1 exit status

我如何保持文件分开,仍然成功地编译程序

Thanks for help

这里有一个链接错误。最有可能的是,您没有为myNewClass包含必需的头文件。

我知道这是旧的,但是要仔细检查编译文件的名称,以防错误在不同的文件中。

原因:上面的代码中没有引用类myNewClass,并且除了Foundation之外没有其他导入。

代码注释中的文件名和你正在编译的文件名不一样。

// File "test.m"
gcc `gnustep-config --objc-flags` -o program program.m

从它的外观来看,给定的代码在拆分时应该可以编译。

另外,关于问题"我还如何包括"编译文件"?",假设你的意思是一个。o文件,你只需要包括头文件(.h),并确保编译器可以找到匹配的。o文件。相关:如何在C中链接对象文件?

显示"未定义的符号"

最新更新