1

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

2 回答 2

2

行首似乎有一些奇怪的字符或字符-(void) add: (Fraction *) f;。如果我将你的界面部分粘贴到 Xcode 中,我会得到与 .h 文件中相同的错误。如果我删除该行并重新键入它,错误就会消失。

于 2012-08-05T13:51:32.027 回答
2
  1. 从 App Store 获取TextWrangler

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

  3. 选择Text -> Zap Gremlins...

  4. 选中“替换为 •”

  5. [ZAP!]

...

 -(double) convertToNum;
 ••••••••••••••••••••••••••••••••••••••-(void) add: (Fraction *) f; 
 -(void) reduce; /*error 2: Expected identifier or '(' */

...

你的问题就在那里!


菲利普很可能是正确的。我敢打赌它是一个ctrl+ return。试试这个:

转到声明reduce:方法的行的末尾,然后点击ctrl+ a

光标可能会跳回到声明add:. 如果您碰巧在一行的末尾点击ctrl+ ,就会发生这种情况。return

reduce:要解决此问题,请使用、 hit backspace、然后 hit转到行首return


例子:

-(void) add: (Fraction *) f; 
-(void) reduce; <*** cursor here, hit ctrl-a

按 ctrl-a 后,光标将位于声明add:. 这意味着您在行尾有一个错误的返回字符add:

也检查前后的线路。菲利普说他在该行的开头看到了时髦的字符add:。此外,Xcode 确实具有“显示隐藏字符”功能。这可能会有所帮助,但根据我的经验,坏的换行符是不可见的。

于 2012-08-05T13:56:33.047 回答