адрес ивара в качестве аргумента - PullRequest
1 голос
/ 06 апреля 2011

Я пытаюсь вызвать функцию, но получаю ошибку:

предупреждение: передача аргумента 1 'drawPlot' из несовместимого типа указателя

//call
    drawPlot(&listData);


//header
    void drawPlot(NSMutableArray*);

listData - это, конечно, NSMutableArray

Ответы [ 2 ]

2 голосов
/ 06 апреля 2011

Удалить &.Ваша переменная уже является указателем.Я предполагаю, что вы объявили это так: NSMutableArray *listData;.

Таким образом, использование & передает «указатель на указатель» на функцию, которая ожидает просто указатель на NSMutableArray.

В SDK есть несколько мест, ожидающих NSError **.И это когда вы используете &, например:

NSError *error = nil;
...
[SomeClass doSomethingReturningError:&error];
if (error != nil) {
    //something bad happened
}

Итак, разница здесь в том, что при передаче, в вашем случае, listData передает объект по значению.Само значение переменной не может быть изменено (но содержимое массива может быть).Другой случай (&error) передается по ссылке, что означает, что значение переменной, то есть самого указателя, можно изменить.Вот почему вы можете сравнить результат, в этом случае, с нулем, чтобы увидеть, если что-то пошло не так.

Более простой пример - сравнить разницу между следующим:

void changeIntByValue(int i)
{
    i++;
}

void changeIntByReference(int &i)
{
    i++;
}

int x=2;
changeIntByValue(x);
NSLog(@"%d", x); // prints 2
changeIntByReference(&x);
NSLog(@"%d", x); // prints 3

Passingпо значению не позволяет изменять аргументы, а передача по ссылке -

0 голосов
/ 06 апреля 2011

Определение listData должно выглядеть примерно так:

NSMutableAarray listData;  //OR 
NSMutableAarray listData[]; 

Если первое, то измените вызов drawPlot на

drawPlot(&listData[0])  // OR
drawPlot(listData)

Если последнее, то измените вызов drawPlot на

drawPlot(&listData [ the index of the listData array member you want to plot]);  // does it work now?  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...