2017-01-19 2 views
0

Я новичок в C и у меня проблемы с моими структурами, которые перечислены как неизвестные типы. Я не могу изменить сигнатуры метода, поскольку они написаны моим профессором, и он будет связываться с ними из внешнего кода.Неизвестный тип имени 'sll'. Проблема с structs

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

EDIT: добавлены фактические ошибки

Заголовочный файл:

#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 FILE:

#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', но это разные вещи. То же самое с 'sll'. –

+0

Обратите внимание, что использование имени, такого как '__SLL_INCLUDED__', в коде, который вы пишете, не является хорошей идеей. Все имена, начинающиеся с двойного подчеркивания, или подчеркивание и заглавная буква, зарезервированы для использования. Вы видите такие имена в заголовках системы, потому что они являются частью реализации, и разработчики должны использовать такие имена, чтобы не топтать пространство имен, зарезервированное для пользователей; вы должны отвечать взаимностью и не топтать пространство имен, зарезервированное для системы. –

ответ

3

Ваш файл C не включен файл заголовка, поэтому тип ssl не определен.

Вам нужно включить заголовок в верхней части файла C. Затем вам необходимо удалить определения struct из файла C, поскольку они уже определены в заголовке.

Смежные вопросы