#define指令的错误是什么?

时间:2012-12-27 23:02:03

标签: ios objective-c c-preprocessor directive

我在代码中有以下行:

#define INACTIVITYTIMEBEFOREBAITARROWDISPATCHED 60.0

我在这一行显示错误Too many arguments to method call, expected 1, have 2

我是否超过了最大长度?如果是这样,最大长度是多少?无论如何,实际的信息似乎很荒谬。

根据请求,这是上下文:

#define VITALITYSECONDS 40.0
#define MINIMUMSCALEFACTOR 0.10
#define MINIMUMSPEED 2.0
#define INACTIVITYTIMEBEFOREBAITARROWDISPATCHED 60.0

#pragma mark - Angle and Distance Functions

-(float)normalizeAngle:(float)angle
{
   float answer;
   // Take an angle and return a value from -pi to pi
   // To do this, we first add pi, then divide by 2pi, then take fractional part, then multiply by 2pi then subtract pi.
   answer = angle + M_PI;
   answer = answer/(2*M_PI);
   answer = answer - floor(answer);
   answer = answer * 2 * M_PI;
   answer = answer - M_PI;
   return answer;
}

为了完整起见,这是违规行:

[self helpText:@"Bait arrow dispatched due to %f seconds inactivity\n",INACTIVITYTIMEBEFOREBAITARROWDISPATCHED];

以下是更正后的版本:

[self helpText:[NSString stringWithFormat:@"Bait arrow dispatched due to %f seconds inactivity\n",INACTIVITYTIMEBEFOREBAITARROWDISPATCHED]];

以下是该方法的声明:

-(void)helpText:(NSString *)text

方法helpText只是一种在屏幕上显示内容以帮助测试人员的临时方法。

3 个答案:

答案 0 :(得分:1)

提示1

在相关行之上,添加

#undef INACTIVITYTIMEBEFOREBAITARROWDISPATCHED

这是为了防止您在其他地方以不同方式定义该宏,并且由于双重定义现在得到了奇怪的结果。虽然我必须承认在这种情况下错误信息应该是不同的 - 我认为仍然值得一试。

提示2

如果不需要,请不要将预编译器宏(定义)用于常量。很少有情况下定义有意义,而给定的定义不会出现其中之一。

用适当的静态const标量替换所有这些定义;

e.g。

static const double kInactivityTimeBeforeBaitArrowDispatched 60.0;

这将导致类型安全,代码清晰,头部划痕减少。

答案 1 :(得分:0)

这不是定义的问题。这是方法的一个问题。

该方法是否包含arg列表?或者只是一个字符串。

因为看起来您正在尝试使用格式设置字符串。

试试这个

[self helpText:[NSString stringWithFormat:@"Bait arrow dispatched due to %f seconds inactivity\n",INACTIVITYTIMEBEFOREBAITARROWDISPATCHED]];

答案 2 :(得分:0)

好吧,你将 2 参数传递给-helpText:,我认为它不是变量,所以它只需要一个参数。

看起来您正在尝试传递字符串格式,并将值放在格式说明符中。要创建一个字符串,必须将参数传递给实际接受这些参数的方法,即+[NSString stringWithFormat:]

NSString *text = [NSString stringWithFormat: @"Bait arrow dispatched due to %f seconds inactivity\n", INACTIVITYTIMEBEFOREBAITARROWDISPATCHED];
[self helpText: text];