黑马程序员---ios开发---objective-c学习-01-简单类实现常见错误及分析
来源:互联网 发布:js if判断不等于1或2 编辑:程序博客网 时间:2024/06/16 14:41
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
前言
最近在学习ios基础视频中objective-c编程语言,因为是初学者,经常在创建类时犯一些错误,我相信肯定也有同学会和我犯同样的错误,在此总结一下我经常会遇到的错误,以及分析一下每种错误会导致编译器如何报错。
首先我们定义一个Dog类:
Dog类中只有一个实例变量_age,代表狗的年龄。
Dog类中定义一个bark方法,实现狗叫功能
源代码如下:
<span style="font-size:14px;">#import<Foundation/Foundation.h>@interface Dog : NSObject{ int _age;}- (void)bark;@end //Dog类@implementation Dog- (void)bark{ NSLog(@"woof woof woof");}@endint main(){ //Dog *d=[Dog new]; //[d bark]; return 0;}</span>
代码打印结果如下:
</pre><pre name="code" class="objc"><pre name="code" class="objc"><span style="font-size:14px;">2015-05-07 20:21:49.962 a.out[405:707] woof woof woof</span>
1、漏写了#import<Foundation/Foundation.h>
有的时候写代码时会漏写了预处理命令#import<Foundation/Foundation.h>,这时编译器能不能通过呢?我们来试一下!
</pre><pre name="code" class="objc" style="margin-top: 4px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; background-color: rgb(240, 240, 240); "><span style="font-size:14px;">class.m:3:18: error: cannot find interface declaration for 'NSObject', superclass of 'Dog'@interface Dog : NSObject~~~~~~~~~~~~~~ ^class.m:13:5: warning: implicitly declaring library function 'NSLog' with type 'void (id, ...)' NSLog(@"woof woof woof"); ^class.m:13:5: note: please include the header <Foundation/NSObjCRuntime.h> or explicitly provide a declaration for 'NSLog'1 warning and 1 error generated.</span>
答案是不能,生成了一个警告和一个错误。我们来分析一下错误,错误是不能找到Dog类的superclass(超类),也就是父类NSObject,这个类是声明在Foundation.h头文件中,我们漏写了,所以报错。我们再分析一下警告,也是NSLog是一个库函数,是在Foundation.h中声明的,所以我们一定要记住包含Foundation框架。
2.@implementation后面没写Dog
方法实现后面没写类名,这样编译器会不会报错呢?我们编译一下。
<span style="font-size:14px;">class.m:11:1: error: expected identifier- (void)bark^class.m:11:1: error: missing context for method declarationclass.m:15:1: error: '@end' must appear in an Objective-C context@end^3 errors generated.</span>
<span style="font-size:14px;"></span>
我们发现报了三个错误,第一个是不可识别的标识符-,第二个是丢失了方法声明的文本,第三个是@end必须出现在objective-c文本中,这三个错误都是因为方法实现找不到对应的类,定义的方法也找不到对应的声明。这里声明和实现是成对出现的,后面都得跟上类名,才能配对。
3、定义实例变量时漏写了{ }
例如:
<span style="font-size:14px;">@interface Dog : NSObject int _age;- (void)bark;@end</span>
这时也会报错
<span style="font-size:14px;">class.m:5:9: error: cannot declare variable inside @interface or @protocol int _age; ^1 error generated.</span>
<span style="font-size:14px;">错误提示为不能在@interface里面声明变量_age,这里{}不能省。应该把int _age用{}括起来;</span>
4、@interface后面漏写了@end
代码如下:
#import<Foundation/Foundation.h>
<span style="font-size:14px;">@interface Dog : NSObject{ int _age;}- (void)bark;漏写了@end//Dog类@implementation Dog- (void)bark{ NSLog(@"woof woof woof");}@endint main(){ //Dog *d=[Dog new]; //[d bark]; return 0;}</span>
<span style="font-size:14px;">我们编译一下,看会发生什么</span>
<pre name="code" class="objc"><span style="font-size:14px;">class.m:10:1: error: missing '@end'@implementation Dog^@endclass.m:3:1: note: class started here@interface Dog : NSObject^class.m:11:13: error: expected ';' after method prototype- (void)bark ^ ;2 errors generated.</span>
<span style="font-size:14px;">这里报了两个错误,第一个是@interface后面没写@end,第二个是- (void)bark后面没写;,因为漏写了@end,这里把方法实现当成声明了,所以报错。</span>
<span style="font-size:14px;">这里我总结了四个我曾经犯过的错误,也根据我的学习给出了我的分析结果,希望各位同学批评指正。当然在学习越往后,我们会犯得错误也会越来越多,我们都要小心记录自己经常会犯得错误,以避免今后继续犯同样的错误。</span>
0 0
- 黑马程序员---ios开发---objective-c学习-01-简单类实现常见错误及分析
- 黑马程序员----objective-C 类与对象基础篇(二)【声明与实现,方法与函数及常见错误】
- 黑马程序员-iOS基础-Objective-C基础(四)OC开发技巧及核心语法(上)
- 黑马程序员---objective-c基础学习--第一个oc程序及代码分析
- iOS学习(十三)Objective-C 常见的内存错误
- 黑马程序员---iOS基础---C语言中的常见错误
- 黑马程序员-IOS学习笔记(一)Objective-C概述
- 黑马程序员-iOS基础-Objective-C基础(二)面向对象思想及类
- 黑马程序员——Objective-C IOS开发模板——黑马 ios 技术博客
- 黑马程序员--iOS--Objective-C基础 (一)
- 黑马程序员——Objective-c学习笔记——类(面向对象)——黑马 ios 技术博客
- 黑马程序员-objective-c基础学习-类
- 黑马程序员---Objective-C学习笔记之一
- 黑马程序员--Objective-C Block学习
- Objective-C学习及iOS开发的准备
- 黑马程序员——IOS基础---Objective-C第一节课---最简单的OC程序
- 黑马程序员------Objective-C------常见数组排序总结
- 黑马程序员—Java开发工具及常见类
- Calender
- Qt中打开二维、三维的工程图
- oracle 数据库 order by排序的时候如何控制null列数据是排在前面还是后面
- Compare Version Numbers
- POJ 1753 Flip Game
- 黑马程序员---ios开发---objective-c学习-01-简单类实现常见错误及分析
- 带括号带键盘输入事件的计算器
- Java Web学习笔记(1)--servlet详解
- 比较全面的gdb调试命令
- XPCOM指南-8_编写WebLock界面
- Leetcode Add Two Numbers 两个链表表示的数相加
- 读写锁
- [2015/05/07]获取本机通信中 的本地地址
- 【leetcode】Jump Game