首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >“sizeof”对不完整类型的应用无效

“sizeof”对不完整类型的应用无效
EN

Stack Overflow用户
提问于 2017-05-11 08:37:26
回答 2查看 12K关注 0票数 0

这是我的makefile文件all: trie

代码语言:javascript
代码运行次数:0
运行
复制
trie: trie.o main.o
    gcc trie.o main.o -o trie -std=c11 -g -Wall

trie.o: trie.c trie.h
    gcc -c trie.c -o trie.o -std=c11 -g -Wall

main.o: main.c trie.h
    gcc -c main.c -o main.o -std=c11 -g -Wall

clean:
    rm -f *.o trie

和头文件

代码语言:javascript
代码运行次数:0
运行
复制
#ifndef TRIE_H
#define TRIE_H

struct node;
typedef struct node node;

//insert a word in a leaf
void insert(char* word, node* leaf);

#endif //TRIE_H

和trie.c文件

代码语言:javascript
代码运行次数:0
运行
复制
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "trie.h"

struct node {
  char* data;
  node* child[127];
};

void insert (char* word, node* leaf) {
  node* curr = leaf;
  for (size_t i = 0; i < strlen(word); i++) {//start from beginning of char to end
    if (curr == NULL) {
      curr = (node*)malloc(sizeof(node)); // if it's null, creating new node
      curr->data = "";
    }
    curr = curr->child[(int) word[i]];
  }
  curr->data = word; // set last node stored the word
}

它在主文件中出现错误消息

代码语言:javascript
代码运行次数:0
运行
复制
#include <stdio.h>
#include <stdlib.h>

#include "trie.h"

int main() {
  node* x = (node*) malloc(sizeof(node));
  insert("hi", x);
  return 0;
}

这是错误消息:

main.c:在函数‘main’中: main.c:7:35:错误:将‘sizeof’应用于不完整的类型‘node {aka struct node}’node* x= (node*) malloc(sizeof(node));

你知道为什么我的代码有错误吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-11 08:43:15

您的main.c没有node的定义,只是声明了名称而没有定义结构。您要么需要将定义包含在.h文件中,以便trie.cmain.c都能看到它,要么需要提供一个分配器方法(在trie.h中声明,在trie.c中定义),该方法可以在有权访问其他不透明类型的定义的位置执行node的定义感知分配(可能还包括初始化)。

票数 3
EN

Stack Overflow用户

发布于 2021-11-19 02:43:41

尝试包含包含相关结构的头文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43904700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档