我对目标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
CalculatorViewController.m末尾的double result = [[self brain] performOperation:operation];
是我使用不兼容类型"void"的表达式初始化"double"时出错的地方这意味着什么,或者我应该在哪里解决这个问题?
performOperation:
可能会被声明为
- (void)performOperation:(NSString*)operation;
正如您所看到的,这个返回是void
。这意味着它不会返回任何内容,因此,您试图将void返回分配给double,这是无效的。
问题可能出现在头文件中,也可能出现在实现它的实现文件中。查看方法签名,看看它是否包含void。
要解决这个问题,要么不给双变量赋值,要么(我认为更可取的是)允许performOperation:
返回双值。
这意味着CalculatorBrain
的performOperation:
方法的返回类型是void
而不是double
。查看该函数的声明和定义,了解需要做些什么来修复错误