0

我在注释行收到错误“未声明的标识符”:

- (BOOL) isInIntArray:(NSInteger[])array theElem:(int)elem{
    int i = 0;
    NSInteger sizeOfArray = (sizeof array) / (sizeof array[0]);
    while(i < sizeOfArray){
        if(array[i] == elem){
            return TRUE;
        }
        i++;
    }
    return FALSE;
}

- (int)getNextUnusedID{
    int i = rand()%34;
    while ([isInIntArray:idsUsed theElem:i]) { //here: Use of undeclared identifier 'isInIntArray'
        i = rand()%34;
    }
    return i;
}

我真的不明白为什么,它们在同一个.m文件中。为什么会这样?

另外,这段代码:

NSInteger sizeOfArray = (sizeof array) / (sizeof array[0]);

给我警告:

数组函数上的 Sizeof 将返回 Sizeof 'NSInteger *' (aka: 'int *') 而不是 'NSInteger[]'"

我应该如何正确确定数组的大小?

4

3 回答 3

6

您似乎错过了self这条线路

while ([isInIntArray:idsUsed theElem:i])

这应该是:

while ([self isInIntArray:idsUsed theElem:i])
于 2013-04-22T12:27:11.157 回答
2

正如@CaptainRedmuff 指出的那样,您在方法调用中缺少目标对象,即self.

//[object methodParam:x param:y];

[self isInIntArray:idsUsed theElem:i];

对于您的第二个问题。在C 语言中,您无法确定数组的大小。这就是为什么不使用它们的原因,因为我们有这方面的对象。我建议你使用这些:

NSMutableArray *array = [[NSMutableArray alloc] init]; // to create array
array[0] = @42; // to set value at index, `@` creates objects, in this case NSNumber
[array insertObject:@42 atindex:0]; // equivalent to the above
NSInteger integer = array[0].integerValue; // get the value, call integerMethod to get plain int
integer = [[array objectAtIndex:0] integerValue]; // equivalent to the above
[array containsObject:@42]; // test if given object is in the array
[array indexOfObject:@42]; // get index of object from array, NSNotFound if not found
array.count; // to get the number of objects

重要提示:这些数组的大小是可变的,并且没有限制!但是您只能在索引0..(n-1)处访问元素(其中n为对象数),并且您只能为索引0..n设置值。
换句话说,你不能array[3] = @42;为空数组做,你需要先填充前 3 个位置(索引 0、1 和 2)。

于 2013-04-22T12:41:09.683 回答
0

将其写入 .h 文件(声明函数)

    - (BOOL) isInIntArray:(NSInteger[])array theElem:(int)elem;

并使用以下方式调用该方法

    while ([self isInIntArray:idsUsed theElem:i]) { //here: Use of undeclared identifier 'isInIntArray'
            i = rand()%34;
    }
于 2013-04-22T12:37:15.727 回答