Новое в C: Хранение структур в массиве - PullRequest
0 голосов
/ 28 января 2011

Мое первое назначение на C - создать очередь. Я использую реализацию на основе массива, а не связанный список.

Я получаю следующую ошибку при попытке скомпилировать мой код:

Queue.c: In function 'Enqueue':
Queue.c:23: warning: assignment from incompatible pointer type

Вот мой код, при необходимости я предоставлю код заголовка:

#include "QueueElement.h"
#include "Queue.h"

#define QUEUE_SIZE 10

struct QueueStruct {
        QueueElement *contents[QUEUE_SIZE];
        int size;
};

Queue CreateQueue(void) {
        Queue q = malloc(sizeof(struct QueueStruct));
        q->size = 0;
        return q;
}

void DestroyQueue(Queue q) {
        free(q);
}

void Enqueue(Queue q, QueueElement *e) {
        if (q->size < QUEUE_SIZE) {

                q->contents[q->size++] = *e;        /* PROBLEM IS HERE */

        }
}

Любая помощь в решении этой проблемы, а также любые другие предложения приветствуются. Спасибо, ребята.

Ответы [ 3 ]

4 голосов
/ 28 января 2011

Я полагаю, вы имеете в виду

q->contents[q->size++] = e;

(без звездочек), потому что вы присваиваете что-то типа QueueElement * массиву QueueElement * [].

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

QueueElement contents[QUEUE_SIZE];

Не уверен, имеет ли это смысл / я прав вообще.

3 голосов
/ 28 января 2011

Я считаю, q->contents[q->size++] = *e; должно быть просто q->contents[q->size++] = e;.

* разыменовывает указатель на фактическое значение в ячейке памяти, и я не думаю, что вы хотите этого - вам нужен указатель.

2 голосов
/ 28 января 2011

*e имеет тип QueueElement, а q->contents[q->size++] является QueueElement*

Вы должны либо сбросить * перед e, либо объявить содержимое как:

    QueueElement contents[QUEUE_SIZE];

Это зависит от того, пытаетесь ли вы сохранить указатели или значения.

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