gpt4 book ai didi

c - ‘sizeof’ 对不完整类型的无效应用

转载 作者:太空宇宙 更新时间:2023-11-04 06:56:23 24 4
gpt4 key购买 nike

这是我的makefile文件全部:尝试

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

和头文件

#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文件

#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
}

主文件出现错误信息

#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}”的无效应用 节点* x = (节点*) malloc(sizeof(节点));

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

最佳答案

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

关于c - ‘sizeof’ 对不完整类型的无效应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43904700/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com