我正在尝试在GNU运行时上创建一个新的Objective-C根类。以下是我到目前为止的情况:
foo.h中:
#include <objc/objc.h>
@interface Foo {
Class isa;
int bar;
}
+ (id) alloc;
+ (id) newWithBar: (int) bar;
- (id) initWithBar: (int) bar;
- (void) p;
- (void) dispose;
@end
foo.m:
#import <foo.h>
#include <stdio.h>
@implementation Foo
+ (id) alloc {
return class_createInstance(self, 0);
}
+ (id) newWithBar: (int) bar {
return [[self alloc] initWithBar: bar];
}
- (id) initWithBar: (int) bar_ {
bar = bar_;
}
- (void) p {
printf ("bar=%d\n", self->bar);
}
- (void) dispose {
object_dispose(self);
}
@end
和一个小测试程序,main.m:
#import <foo.h>
int main(int argc, char *argv[]) {
Foo *foo = [Foo newWithBar: 3];
[foo p];
[foo dispose];
return 0;
}
当我编译foo.m时,我收到以下警告:
foo.m: In function ‘+[Foo alloc]’:
foo.m:7:3: warning: return makes pointer from integer without a cast [enabled by default]
为什么呢?当我深入研究头文件时,我可以看到class_createInstance返回id。我在这里做错了什么?
答案 0 :(得分:1)
您需要包含目标C运行时的标头。编译器的默认行为是假设未声明的函数返回int。
#include <objc-auto.h>
抱歉 - 上面的答案适用于OS X / iOS。对于GNU,您需要包含runtime.h以及objc.h
#include <objc/runtime.h>