-2

我对目标 c 和制作应用程序非常陌生,并且不确定为什么这没有构建。这是我失败的代码:CalculatorViewController.m

#import "CalculatorViewController.h"

@interface CalculatorViewController ()

@end

@implementation CalculatorViewController
-(CalculatorBrain *)brain
{
    if (!brain){
        brain = [[CalculatorBrain alloc] init];
    }
    return brain;
}

-(IBAction)digitPressed:(UIButton *)sender;
{
    NSString *digit = [[sender titleLabel] text];
    if (userIsInTheMiddleOfTypingANumber){
        [display setText:[[display text] stringByAppendingString:digit]];
    } else{
            [display setText:digit];
        userIsInTheMiddleOfTypingANumber = YES;
        }

}
-(IBAction)operationPressed:(UIButton *)sender;
{
    if (userIsInTheMiddleOfTypingANumber){
        [[self brain] setOperand:[[display text] doubleValue]];
        userIsInTheMiddleOfTypingANumber = NO;
    }
    NSString *operation = [[sender titleLabel] text];
    double result = [[self brain] performOperation:operation];
    [display setText:[NSString stringWithFormat:@"%g", result]];
}

@end

和 CalculatorViewController.h

   #import <UIKit/UIKit.h>
#import "CalculatorBrain.h"

@interface CalculatorViewController : UIViewController{
    IBOutlet UILabel *display;
    CalculatorBrain *brain;
    BOOL userIsInTheMiddleOfTypingANumber;
}

-(IBAction)digitPressed:(UIButton *)sender;
-(IBAction)operationPressed:(UIButton *)sender;


@end

double result = [[self brain] performOperation:operation];在 CalculatorViewController.m 的最后,我收到错误 Initializing 'double' with an expression of in compatible type 'void' 这是什么意思,或者我应该在哪里解决这个问题?

4

2 回答 2

0

这意味着CalculatorBrain'sperformOperation:方法的返回类型是 typevoid而不是double. 查看该函数的声明和定义,了解您需要做什么来修复错误

于 2013-02-05T21:02:39.910 回答
0

performOperation:可能会被宣布为

- (void)performOperation:(NSString*)operation;

如您所见, this 的返回是void. 这意味着它不会返回任何东西,因此,您试图将 void 返回分配给无效的双精度数。

问题要么在头文件中,要么在已实现的实现文件中。查看方法签名,看它是否包含 void。

要解决这个问题,要么不要分配给双精度变量,要么(我认为更可取)允许performOperation:返回双精度值。

于 2013-02-05T21:03:10.033 回答