У меня есть функция
void file::pg_down(fldr *f)
{
drawItem(*f, drw::Colours::blueVivid);
f->item_pos = myList.setDown(f->active->next, f->cord.x);
if (!strcmp(f->item_pos->name, myStr))
f->item_pos = f->item_pos->prev;
drawItem(*f, drw::Colours::greenVivid);
}
который вызывает функцию
contFolder* list::setDown(contFolder* current, int *xCord)
{
arl::contFolder* tmp = NULL;
arl::contFolder* i = NULL;
for (i = current; i->next; i = i->next, xCord++)
{
if (!strcmp(i->name, myStr))
{
tmp = i;
return tmp;
}
}
tmp = i;
return tmp;
}
и мне нужна функция contFolder * list :: setDown (contFolder * current, int * xCord), чтобы изменить значение xCord, но не может понять, как правильно передать этот аргумент. Поэтому у меня есть ошибка
Ошибка 1 ошибка C2664: 'arl :: contFolder * arl :: list :: setDown (arl :: contFolder *, int *)': не может преобразовать аргумент 2 из 'unsigned int' в 'int *'
Что бы вы посоветовали?
myList.setDown(f->active->next, f->cord.x);
Должно быть
myList.setDown(f->active->next, (int*)&f->cord.x);
Ваша функция setDown
принимает int*
, а не int
, поэтому передайте адрес вашей переменной.
Кроме того, у вас есть несоответствие типа. Почему ваша функция принимает int*
когда вы храните координаты как unsigned int
s? Просто возьмите правильный тип...
contFolder* list::setDown(contFolder* current, unsigned int *xCord);
Кстати, вы никогда не используете xCord
. Вы увеличиваете его, но это копия указателя, поэтому он не влияет на f->cord.x
Что вы на самом деле пытаетесь сделать здесь? Если вы пытаетесь f->cord.x
тогда вам нужно будет использовать (*xCord)++
.
f->coord.x
- этоf->coord.x
без знака , а неf->coord.x
. У вас несоответствие типов. Тебе придется сыграть.