Ошибка несовместимого типа при попытке сохранить массив указателей - PullRequest
0 голосов
/ 29 апреля 2011

Эй, я пытаюсь сохранить массив указателей (на структуры), но постоянно получаю сообщение об ошибке

ошибка: несовместимые типы при назначении типу "счетчик структуры" из типа "структура"counter * '

Но, насколько я знаю, код правильный.Есть идеи?

struct counter 
{
   long long counter;            /* to store counter */
};

static struct counter* counters = NULL;

struct counter* makeNewCounter(void)
{
    struct counter* newCounter = malloc(sizeof(struct counter));
    newCounter->counter = 0;
    return newCounter;
}

static void setUpCounters(void)
{   
    counters = malloc(ncounters * sizeof(struct counter*));

    int i;
    for (i = 0; i < ncounters; i++)
    {
              counters[i] = makeNewCounter(); //This is the line giving the error
    }
}

Ответы [ 4 ]

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

counters[i] относится к типу struct counter;makeNewCounter() возвращает значение типа struct counter *, и компилятор справедливо жалуется.

Попробуйте

counters[i] = *makeNewCounter();

или

struct counter **counters;
1 голос
/ 29 апреля 2011

Это потому, что счетчики имеют тип счетчик *.Используя оператор скобок [], вы разыменовываете указатель так, что теперь имеете дело с реальной структурой.Не указатель на него!

Но ваша функция makeNewCounter () возвращает указатель, так что это точка, в которой он не помещается.Левая сторона имеет счетчик типа, правая сторона имеет счетчик типа *

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

Исправление: статическая структура counter ** counters = NULL;

Теперь counters - это указатель на указатель на struct counter.Таким образом, вы можете сохранить его.

Надеюсь, это поможет

0 голосов
/ 29 апреля 2011
static struct counter* counters

должно быть:

static struct counter** counters
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...