使用指针

时间:2015-11-23 06:16:30

标签: c

嗨,所以我正在玩一些自己的抽象数据类型,基本上是创建一个从命令行读取值然后将它们存储到一个文件中的函数集,该文件稍后会被排序

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

我已根据自己的知识正确完成了所有事情,并且之前甚至遇到过这个问题,但它却以某种方式平滑了自己

所以我真的不确定为什么会出现这个问题?据我所知,我正在做的一切正确,我已经正确地分配了空间并使用它应该使用它,但因此当我运行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

Makefile

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;

}

1 个答案:

答案 0 :(得分:3)

您的编译器无法解析您在struct values中定义的readNumbers.c成员,因此将其作为不完整类型的投诉。您可以将结构的定义移动到头文件中。