'Fraction'没有可见的@interface声明选择器'add:'

时间:2012-08-05 13:36:22

标签: objective-c interface identifier

我正在学习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

2 个答案:

答案 0 :(得分:2)

-(void) add: (Fraction *) f;行的开头似乎有一些奇怪的字符或字符。如果我将您的接口部分粘贴到Xcode中,我会得到与您在.h文件中相同的错误。如果我删除该行并重新输入,则错误消失。

答案 1 :(得分:2)

  1. 抓取TextWrangler from App Store

  2. 打开有问题的.h文件

  3. 选择文字 - &gt; Zap Gremlins ......

  4. 选中“替换为”

  5. [ZAP!]

  6. ...

     -(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确实具有“显示隐藏字符”功能。这可能会有所帮助,但根据我的经验,坏的换行是不可见的。