【问题标题】:storage size of ‘names’ isn’t known“名称”的存储大小未知
【发布时间】:2010-10-28 17:31:01
【问题描述】:

编译此 .c 源文件时出现此错误

/INIT_SOURCE_BUILD/src/names_list.c:7: 错误:“名称”的存储大小不是 已知

#include <stdio.h>
#include "list.h"

int main(){

    struct  List names;
    names->size = 3;

    struct ListElmt michael;
    struct ListElmt john;
    struct ListElmt adams;

    names->head = michael;

    michael->data = 12;
    michael->next = john;
    john->data = 14;
    john->next = adams;
    adams->data = 16;

    struct ListElmt pointer = List->head;
    for(int x = 0; x < 3 ; x++){
        printf("Iteration.%d data: %d", x, pointer->data);
        pointer->next = pointer->next->next;
    }
}

这是这个链表的标题

#ifndef LIST_H
#define LIST_H

#include <stdio.h>

/*                                      Define linked list elements*/

typedef struct _ListElmt{

void                *data;
struct _ListElmt        *next;

} ListElmt;

/*                                      Define a structure for the list*/

typedef struct _List{

int                 size;
int                 (*match)(const void *key1, const void *key2);
void                (*destroy)(void *data);

ListElmt             *head;
ListElmt             *tail;

} List;

void list_init(List *list, void (*destroy)(void *data));

void list_destroy(List *list);

int list_ins_next(List *list, ListElmt *element, const void *data);

int list_rem_next(List *list, ListElmt *element, void **data);

int list_size(const List *list);

ListElmt *list_head(const List *list);

ListElmt *list_tail(const List *list);

int list_is_head(const ListElmt *element);

int list_is_tail(const ListElmt *element);

void *list_data(const ListElmt *element);

ListElmt *list_next(const ListElmt *element);
#endif

【问题讨论】:

    标签: c struct typedef forward-declaration


    【解决方案1】:

    当你像这样typedefstruct 时,你不必在声明时使用struct

    List names;
    

    而不是

    struct List names;
    

    它也不是指针,所以names-&gt;size 应该是names.size

    【讨论】:

    • +1 只是一个评论,使其更清楚:struct List 不存在。有一个struct _List 和一个typedef List 标识与struct _List 相同的类型。 (我讨厌 typedef!)
    • 我还有另一个错误 names_list.c:14:错误:'->' 的类型参数无效(有'List')
    • @Sam:指针使用-&gt; 快捷方式访问成员,普通结构使用. 访问它们。
    • 另外一点:以下划线和大写字母开头的标识符(如_List)保留供实现(7.1.3)使用,不应在应用程序代码中使用。
    【解决方案2】:

    struct List names; 没有声明指针,但您正试图取消引用它(使用-&gt;)。请改用names.size

    【讨论】:

      【解决方案3】:

      该结构称为_List。 typedef 是列表。所以你想要

       List names;
      

      struct _List names; /* probably not, the _ is convention for internal names */
      

      您的行声明了一个尚未定义的“结构列表”。

      关于 . vs -> 问题

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-07-24
        • 1970-01-01
        • 1970-01-01
        • 2022-07-08
        • 2019-06-30
        • 1970-01-01
        相关资源
        最近更新 更多