我正試圖在Windows上學習目標c。我的程序有警告使用gcc進行目標C編譯4.6.2
編譯我的代碼是
#include <objc/Object.h>
@interface Greeter:Object
{
/* This is left empty on purpose:
** Normally instance variables would be declared here,
** but these are not used in our example.
*/
}
- (void)greet;
@end
#include <stdio.h>
@implementation Greeter
- (void)greet
{
printf("Hello, World!\n");
}
@end
#include <stdlib.h>
int main(void)
{
id myGreeter;
myGreeter=[[Greeter alloc] init];
[myGreeter greet];
[myGreeter release];
return EXIT_SUCCESS;
}
我使用下面的命令
gcc -o Greeter Greeter.m -I /GNUstep/System/Library/Headers -L /GNUstep/System/Libra
/Libraries -lobjc -lgnustep-base -fconstant-string-class=NSConstantString
彙編GNUstep的我的計劃,我得到的編譯
: 'Greeter' may not respond to '+alloc' [enabled by default]
: (Messages without a matching method signature [enabled by default]
: will be assumed to return 'id' and accept [enabled by default]
: '...' as arguments.) [enabled by default]
: no '-init' method found [enabled by default]
: no '-release' method found [enabled by default]
下列警告所以當我運行我的可執行文件時,對象不會被實例化。
我用gcc MinGW的,從哪裏gcc版本4.6.2是
--update ---
程序運行正常,當我從延長NSObject的,而不是對象
--update 2 ----
我Object.h看起來像
#include <objc/runtime.h>
@interface Object
{
Class isa;
}
@end
--UP日期3 ----
我修改了我的代碼,如下所示。它編譯好,但我不知道這是否是正確的方式去做的事情
@interface Greeter
{
/* This is left empty on purpose:
** Normally instance variables would be declared here,
** but these are not used in our example.
*/
}
- (void)greet;
+ (id)alloc;
- (id)init;
- release;
@end
#include <stdio.h>
@implementation Greeter
- (void)greet
{
printf("Hello, World!\n");
}
+ (id)alloc
{
printf("Object created");
return self;
}
- (id)init
{
printf("Object instantiated");
return self;
}
- release {}
@end
#include <stdlib.h>
int main(void)
{
id myGreeter;
myGreeter=[[Greeter alloc] init];
[myGreeter greet];
[myGreeter release];
return EXIT_SUCCESS;
}
該代碼編譯正常;但它什麼也沒有做。它不會分配歡迎詞,永遠不會調用init,也不會釋放任何東西。基於Object類的學習Objective-C在1994年以前會很有用。現在?幾乎所有的Objective-C在任何地方都使用NSObject作爲根類,並且幾乎定義了剩餘語言的細節(包括近來的一些語法)。 – bbum 2012-04-14 17:06:40