gpt4 book ai didi

c - 使用指针时,编译时出现与不完整类型相关的未知原因

转载 作者:行者123 更新时间:2023-11-30 18:38:28 25 4
gpt4 key购买 nike

嗨,我正在使用一些自己的抽象数据类型,并且基本上创建了一个函数集,该函数集从命令行读取值,然后将它们存储到一个文件中,稍后将对其进行排序

一切都很顺利,除了与标题有关的一件事

据我所知,我已经正确地完成了所有事情,甚至以前也遇到过这个问题,但它以某种方式自行解决了

所以我真的不确定为什么会出现这个问题?据我所知,我做的一切都是正确的,我已经正确分配了空间并按照应有的方式使用了它,但因此当我运行 make 时出现问题

ev@devel ~/Desktop/algorithms $ make
gcc -Wall -Werror -g -c -o readNumbers.o readNumbers.c
gcc -Wall -Werror -g -c -o main.o main.c
main.c: In function ‘main’:
main.c:21:13: error: dereferencing pointer to incomplete type
while(i<s->count){
^
main.c:22:14: error: dereferencing pointer to incomplete type
fputc(s->values[i],pfile);
^
make: *** [main.o] Error 1

提前感谢您的帮助

这是我的文件,您是否可以指出这个问题似乎出在哪里

这是第一个文件 readNumbers.c

//readNumbers implementation

#include <stdio.h>
#include <stdlib.h>
#include "readNumbers.h"

/*
typedef union data * Data;

union data{
int *i;
char *k;
};

*/


typedef struct values{
int count;
int *values;
}values;

Nums create(int argc, char **argv){

int i=1;
values *a = malloc(sizeof(struct values));
a->count = argc-1;
a->values = malloc(sizeof(int) * a->count);

if(argc<2){
printf("Not enough arguments...failed\n");
return NULL;
}


while(i<argc){
a->values[i-1]=atoi(argv[i]);
i++;
}

return a;
}

readNumbers.h 文件

//interface for readNumbers

#ifndef __readNum
#define __readNum

typedef struct values * Nums;
Nums create(int, char**);

#endif

生成文件

CC=gcc
CFLAGS=-Wall -Werror -g
OBJS=readNumbers.o main.o

read: $(OBJS)
$(CC) -o read $(OBJS)
read.o: readNumbers.c readNumbers.h

main.o: main.c readNumbers.h

clean:
rm -f read $(OBJS)

以及使用实现主文件的文件

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "readNumbers.h"

int main(int argc, char **argv){

Nums s = create(argc, argv);
if(s==NULL){
printf("Something went wrong\n");
return EXIT_FAILURE;
}

FILE * pfile;
pfile = fopen("nums","w");
if(pfile ==NULL) perror ("Error opening file");
return EXIT_FAILURE;

int i=0;

while(i<s->count){
fputc(s->values[i],pfile);
i++;
}
fclose(pfile);

return 0;

}

最佳答案

您的编译器无法解析您在 readNumbers.c 中定义的结构值成员,因此,提示它是不完整的类型。您可以将结构体的定义移至头文件中。

关于c - 使用指针时,编译时出现与不完整类型相关的未知原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33864730/

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