新手Objective C错误,例如_main
Posted
技术标签:
【中文标题】新手Objective C错误,例如_main【英文标题】:Newbie Objective C Error such as _main 【发布时间】:2015-08-12 20:17:54 【问题描述】:我整天都在修修补补,我似乎无法修复这个错误。
代码如下:
//
// main.m
// Learning ObjC
//
// Created by Nickirv on 8/9/15.
// Copyright (c) 2015 Nickirv. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Person: NSObject
int age;
int weight;
-(void) print;
-(void) setAge: (int) a;
-(void) SetWeight: (int) w;
@end
它会输出这个问题:
"_main", referenced from:
implicit entry/start for main executable
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
如果有任何帮助,我将不胜感激!非常感谢你!
【问题讨论】:
前导下划线_
由编译器添加到函数名称之前,因此您看到的 main
在编译器和错误消息中变为 _main
。
【参考方案1】:
您不能删除main
样板代码:
int main(int argc, const char * argv[])
@autoreleasepool
return 0;
最后,Objective-C 是“C”,程序通过调用main
开始执行。此外,Objective-C 代码需要在 autoreleasepool
中执行。
您在样板之外(通常在上面)定义类 @interfaces
和 @implemtations
,但要运行的第一行代码必须在自动释放池范围内 。
这是一个示例 Objective-C 程序,类似于 OP 似乎想要的,为了简单和演示,使用 @properties
。
在完全理解以下代码之前,学习 Objective-C 文档很重要,td;dr 不适用于此。
#import <Foundation/Foundation.h>
@interface Person: NSObject
@property int age;
@property int weight;
- (void)print;
@end
@implementation Person : NSObject
- (void)print
printf("Age: %i, weight: %i", self.age, self.weight);
@end
int main(int argc, const char * argv[])
@autoreleasepool
Person *don = [[Person alloc] init];
don.weight = 130;
don.age = 23;
[don print];
return 0;
输出:
年龄:23,体重:130
【讨论】:
感谢您的帮助!主要样板代码是否高于我的@implementation 和@interfaces 是否重要? 是的,因为main
函数必须知道它调用了什么。一般来说,在 Objective-C 类中,当前编译器中不需要事先声明(方法顺序)。区别是编译器中的一种怪癖。一般来说,Objective-C 代码在一个单独的文件中,所以这个排序问题不是问题。
非常感谢您的真诚帮助!以上是关于新手Objective C错误,例如_main的主要内容,如果未能解决你的问题,请参考以下文章
Objective C UITableView - 更改单元格高度后表格单元格显示错误内容