【问题标题】:How do I declare structures in my .C file?如何在我的 .C 文件中声明结构?
【发布时间】:2013-03-22 01:56:48
【问题描述】:

我必须在C中实现一个Linked List,根据项目规范,我的头文件中必须创建以下结构:

typedef struct node {
char *string;
struct node* next;  
} 


typedef struct {
node *head;  /* could have been struct node* as well */
node *tail;
} list;

现在如何使这些在我的 .C 文件中可用?我已经 #included 头文件,但是当我尝试调用例如 myList.head 时,我不断收到错误消息,指出我正在尝试对不是结构或联合的东西执行操作,所以我该怎么做解决这个问题?

【问题讨论】:

  • 附注,据我所知,.C 是 C++ 文件而不是 C 文件的常规扩展名,至少在使用 gcc 时是这样
  • 头文件应该叫myList.h,而不是.head。如有其他问题,请始终包含编译器的实际错误消息。过多的信息会因为释义而丢失。
  • @Kay "头文件应该叫 myList.h,而不是 .head" -- 嗯,很明显 'myList' 是 list*,不是文件名,还有 @987654325 @ 是 list 的成员,而不是文件扩展名,并且 OP 想要 myList->head。 “myList->head”将是一个有问题的文件名。
  • @AdelQodmani 这不适用于主流操作系统,它忽略了文件名的大小写。
  • @JimBalter Windows 保留文件名的大小写。这就是编译器所需要的。不过,我对 myList.head 的解释是错误的。

标签: c struct header structure declare


【解决方案1】:

您的第一个 struct 后面需要一个分号。 要么去掉你的typedef,要么给它一个名字。

【讨论】:

  • typedef 的名称也丢失了。
  • 实际代码中没有分号,是我在这里输入代码时出错
【解决方案2】:

您的typedef 错误。语法是:

typedef [some_type_definition] [type_name];

类型定义是这样的:

struct node {
    char *string;
    struct node* next;
};

所以你需要在它前面加上typedef 并在它后面加上node(在分号之前)。这将允许您使用nodestruct node 引用结构。

对于您的列表,您没有命名结构,但您使用了typedef。这意味着您不能将其称为struct list - 您只能使用list。您可以根据需要命名结构。

【讨论】:

  • 但我的问题是,如果所有这些都在我的头文件中,我如何在我的实际 c 文件中准确地使用该结构?
  • 在我的 C 文件中,我有方法在列表和节点中传递,但是当我尝试访问列表内容(例如传入的列表的头部)时,我被告知结构不是结构......它是
  • 您只需包含标题。如果你正确地声明你的类型,那么当你定义该类型的变量或指针时,一切都会好起来的。如果您有list myList,那么您可以访问myList.head。如果您有list *myList,则以myList->head 访问。
  • 啊,是的,这是有道理的。知道为什么我在执行此操作时会收到“无效的初始化程序”错误吗? int llSize(list *myList){ 节点诱饵 = myList->head;
  • 是的,您正在尝试使用node* 指针初始化node 的实例。如果要复制整个节点,则必须执行node decoy = *myList->head。如果你只是想复制指针,你必须做node *decoy = myList->head
猜你喜欢
  • 2011-02-13
  • 1970-01-01
  • 2021-12-13
  • 1970-01-01
  • 2021-03-10
  • 1970-01-01
  • 1970-01-01
  • 2023-02-25
  • 1970-01-01
相关资源
最近更新 更多