2011-01-28 14 views
0

私の最初のC割り当ては、キューを作成することです。私はリンクリストとは対照的に配列ベースの実装を使用しています。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 */ 

     } 
} 

これですべてのヘルプを問題は他の提案と同様に大きく評価されます。 ありがとうございます。

+1

難解なポインタ記法のようです。 eを逆参照しようとしています.eの値(ほとんどのサイズの連続したメモリブロック)をポインタ(通常は4バイト)にコピーします。状況が合わず、サイズが一致しても、 'QueueElement'は' QueueElement * 'と同じではありません。 – Trinidad

+0

「キュー」とは何ですか?あなたが提供したコードには 'Queue'の定義はありません。 – AnT

答えて

3

私はq->contents[q->size++] = *e;が単にq->contents[q->size++] = e;であると信じています。

*は、メモリ位置での実際の値へのポインタを逆参照します。私はあなたがそれを望むとは思わない - あなたはポインタが必要です。

+0

それでした。プログラムは今コンパイルされます。迅速な返信をお寄せいただきありがとうございます。 (回答としてマークするのを待って) – Pooch

+1

素晴らしい!フォローアップとして、私はこのガイドがCのポインタを学ぶために私にとって非常に有用であることを発見しました:http://pw1.netcom.com/~tjensen/ptr/pointers.htm。これは50ページの長さで、ポインタ、参照、逆参照、および配列がC言語でどのように動作するかの基本を教えてくれます。 –

4

私は[] *あなたがQueueElementの配列にタイプQueueElement *の何かを代入しているので、あなたが(アスタリスクなし)

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

を意味すると考えています。

またはあなたの代わりにこれを変更することにより、それを修正することができるかもしれない - 私はあなたが意味するかもしれない把握するものに近いものかもしれない: -

QueueElement contents[QUEUE_SIZE]; 

ない、これは理にかなっている場合は/私は右全く確信して。

2

*eはタイプQueueElementq->contents[q->size++]であるあなたがEの前に*を落としたり、などの内容を宣言する必要がありますいずれかQueueElement*

です:あなたが店ポインタまたは値にしようとしている場合、それが依存

QueueElement contents[QUEUE_SIZE]; 

関連する問題