创建头文件的问题

时间:2012-03-02 08:57:37

标签: c header struct

好的,我有一个名为main.c的主要来源,名为test.h的头文件,以及另一个名为handBeraknare.c的类。 我试图通过将我的一些方法转移到类handBeraknare.c来使我的代码更具可读性。

所以在main.c我有一个看起来像这样的结构:

typedef struct kort{
  int draget;
  char farg;
  int nummer;
  struct kort *next;
  }kort; `

main.c我使用kort k=(kort*)malloc(sizeof(kort));创建其中几个并将它们放入数组中。我试图获得的是将kort的这个数组发送到handBeraknare.c中的函数,但我得到某种奇怪的错误"in file included from handBeraknare.c"

我在说这与现在知道"kort"是什么{我的结构}的头文件有关。无论如何,这里有一些代码:

// in test.h
int beraknaFarg(kort kortHand[]);



// in handBeraknare.c
#include <stdio.h>
#include "test.h"
int beraknaFarg(kort kortHand[]){
 char c = kortHand[0].farg;
    int i;
    for (i=1;i<5;i++){
        if (kortHand[i].farg!=c){
                                 printf("inte färg");
                                 system("pause");
           //Spelaren har inte färg. Retunera 0
           return 0;
           }
         }
      //Spelaren har färg. Retunera 1 
       printf("!!!!färg");
                                 system("pause");  
      return 1;
}


//part of the main class. Calling function test() 
// which calls the method beraknaHand which exists in handBeraknare.c

#include "test.h"
...

int main(int argc, char *argv[])
{
  test();
}

// the testfunction in my mainclass
void test(){
       char farg[4]={'S','K','R','J'};
       int nummer[14]={0,2,3,4,5,6,7,8,9,10,11,12,13,14};
       kort kortArray[52];
       kort kortHand[5]; 
                  kort *k;
                  k=(kort*)malloc(sizeof(kort));              
                  k->farg='s';
                  k->nummer=5;
                  kortHand[0]=*k;

                  k->farg='s';
                  k->nummer=11;
                  kortHand[1]=*k;

                  k->farg='s';
                  k->nummer=12;
                  kortHand[2]=*k;

                  k->farg='s';
                  k->nummer=11;
                  kortHand[3]=*k;

                  k->farg='s';
                  k->nummer=9;
                  kortHand[4]=*k;
    beraknaFarg(kortHand);

2 个答案:

答案 0 :(得分:2)

让test.h读取

typedef struct kort{ 
      int draget; 
      char farg; 
      int nummer; 
      struct kort *next; 
      } kort;
int beraknaFarg(kort kortHand[]); 

并从main.c中删除typedef

答案 1 :(得分:1)

您需要在头文件中定义typedef,然后将头文件包含在您希望它使用它的C文件中。 另外,因为它是typedef定义而不是声明,所以需要在C文件中定义它。 即
h文件:

typedef strcut   
{  
   int a;  
   ....  
}t_struct_type;

c file:

t_struct_type struct_var;

如果要在多个c文件中使用struct_var,则需要在h文件中添加extern关键字。像这样:extern t_strcut_type struct_var