2017-01-19 18 views
0

私はC言語を新しくしていて、構造体が不明な型としてリストされていることに問題があります。私は教授が書いたメソッドシグネチャを変更することはできず、外部のコードからメソッドシグネチャをリンクします。不明なタイプ名 'sll'。構造体に関する問題

sll.c:6:1: error: unknown type name 'sll' 
sll *newSLL(void (*d)(FILE *, void*)) { 
in function 'newSLL'; 

編集:

#ifndef __SLL_INCLUDED__ 
#define __SLL_INCLUDED__ 

typedef struct sllnode { 
    void *value; 
    struct sllnode *next; 
} sllnode; 

typedef struct sll { 
    sllnode *head; 
    sllnode *tail; 
    int size; 
    void (*display)(FILE *,void *); 
} sll; 

extern sll *newSLL(void (*d)(FILE *,void *)); 

Cファイル:

#include <stdio.h> 
#include <stdlib.h> 

struct sllnode { 
    void *value; 
    struct sllnode *next; 
} *sllnode; 

struct sll { 
    struct sllnode *head; 
    struct sllnode *tail; 
    int size; 
    void (*display)(FILE *,void *); 
} *sll; 

sll *newSLL(void (*d)(FILE *,void *)) { 
    struct sll *items = malloc(sizeof(sll)); 
    if (items == 0){ 
     fprintf(stderr,"out of memory"); 
     exit(-1); 
    } 

    items->head = 0; 
    items->tail = 0; 
    items->size = 0; 
    items->display = d; 
    return items; 
} 
+1

あなたの質問は、あなたが実際に取得したエラーを完全に、そして未編集で更新してください。それらをコピーしてテキストとして質問に貼り付けます。そして、あなたが質問を更新しているときに、ソース内のどこにコメントがあるのか​​を*印を付けてください。 –

+2

しかしヒントとして:あなたは 'sllnode'という名前の2つのシンボルを持っていますが、それは異なることを意味します。 'sll'と同じこと。 –

+0

あなたが書くコードで '__SLL_INCLUDED__'のような名前を使うのは良い考えではないことに注意してください。二重アンダースコアで始まるすべての名前、またはアンダースコアと大文字は、実装が使用するために予約されています。そのような名前は、実装の一部であり、実装者がユーザーのために予約された名前空間を踏みにじらないような名前を使用する必要があるため、システムヘッダーに表示されます。システムのために予約されている名前空間を往復させて踏みにじらないでください。 –

答えて

3

あなたのCファイルは、ヘッダファイルが含まれないので、タイプssl決して実際のエラー

ヘッダファイルを追加しました定義されていません。

Cファイルの先頭にヘッダーを含める必要があります。 structの定義は、ヘッダにすでに定義されているため、Cファイルから削除する必要があります。