我正在学习Objective-c编程,有两个我无法解决的错误。你能告诉我什么是错的吗?
#import "Fraction.h"
int main (int argc, char * argv[]) {
@autoreleasepool {
Fraction *aFraction = [[Fraction alloc] init];
Fraction *bFraction = [[Fraction alloc] init];
[aFraction setTo: 1 over: 4];
[bFraction setTo: 1 over: 2];
[aFraction print];
NSLog (@"+");
[bFraction print];
NSLog (@"=");
[aFraction add: bFraction]; /*error 1: No visible @interface for 'Fraction' declares the selector 'add:'*/
[aFraction reduce];
[aFraction print]; }
return 0; }
#import <Foundation/Foundation.h>
@interface Fraction : NSObject
@property int numerator, denominator;
-(void) print;
-(void) setTo: (int) n over: (int) d;
-(double) convertToNum;
-(void) add: (Fraction *) f;
-(void) reduce; /*error 2: Expected identifier or '(' */
@end
答案 0 :(得分:2)
在-(void) add: (Fraction *) f;
行的开头似乎有一些奇怪的字符或字符。如果我将您的接口部分粘贴到Xcode中,我会得到与您在.h文件中相同的错误。如果我删除该行并重新输入,则错误消失。
答案 1 :(得分:2)
打开有问题的.h文件
选择文字 - &gt; Zap Gremlins ......
选中“替换为”
[ZAP!]
...
-(double) convertToNum;
••••••••••••••••••••••••••••••••••••••-(void) add: (Fraction *) f;
-(void) reduce; /*error 2: Expected identifier or '(' */
...
那里有你的问题!
菲利普很可能是正确的。我敢打赌它是 ctrl + 返回。试试这个:
转到声明reduce:
方法的行的末尾,然后点击 ctrl + a 。
光标可能会跳回到声明add:
的行的开头。如果碰巧在一行的末尾点击 ctrl + return ,就会发生这种情况。
要修复,请转到reduce:
行的开头,点击退格,然后按 return 。
示例:
-(void) add: (Fraction *) f;
-(void) reduce; <*** cursor here, hit ctrl-a
按ctrl-a后,光标将位于声明add:
的行的开头。这意味着您在add:
行的末尾有一个错误的返回字符。
也检查前后线。菲利普说他在add:
行的开头看到了时髦的人物。此外,Xcode确实具有“显示隐藏字符”功能。这可能会有所帮助,但根据我的经验,坏的换行是不可见的。