首页 > 学院 > 开发设计 > 正文

Code Blocks做Objective-C遇到奇葩编译错误

2019-11-08 01:36:09
字体:
来源:转载
供稿:网友

摘要:

按照我前面一片博客所说的那样配置好GNUstep+clang编译器之后,Objective-C还是出现编译不通过,报下面这个错误: error: synthesized PRoperty 'name' must either be named the same as a compatible instance variable or must explicitly name an instance variable。

原版测试代码:

Greeting.h:

#import <Foundation/Foundation.h>@interface Greeting : NSObject@property (nonatomic) NSString *name;- (void) print;@end

Greeting.m:

#import "Greeting.h"@implementation Greeting@synthesize name=_name;-(void) print{ NSLog(@"%@",self.name); }@end

main.m:

#import "Greeting.h"int main (int argc, const char *argv[]){ @autoreleasepool { Greeting *greeting=[[Greeting alloc]init]; greeting.name= @"ab" ; [greeting print]; } return 0;}

但是编译报错: 这里写图片描述 再三核实代码,没有发现任何有语法错误的地方(参考《Objective-c程序设计第六版》一书)。 最终,发现问题是当前的clang编译器版本是32位的,巨坑,这个32位的clang编译器很多功能无法使用。 这里没有的就是,@proerty和@synthesize对属性的自动生成功能,没有自动生成实例变量来存放属性值, 只能做到自动为属性创建getter和setter。

可以按照下面的代码修改来解决:

Greeting.h:

#import <Foundation/Foundation.h>@interface Greeting : NSObject{ NSString *_name;}@property (nonatomic) NSString *name;- (void) print;@end

Greeting.m:

#import "Greeting.h"@implementation Greeting{ NSString *_name;}@synthesize name=_name;-(void) print{ NSLog(@"%@",self.name); }@end

不出所料,应该能编译成功且成功执行了吧。

但是这是治标不治本的办法,不知道有没有小伙伴有更好的解决办法,欢迎评论交流。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表