2012-03-02 2 views
0

Хорошо, у меня есть основной источник, называемый 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".

Im gussing Это связано с заголовочным файлом, теперь зная, что такое "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); 
+0

Вы предоставили недостаточно информации. Как выглядит handBeraknare.h? И можете ли вы предоставить точное сообщение об ошибке, пожалуйста. –

ответ

2

Сделать test.h читать

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

и удалить typedef из main.c

+0

Получил его на работу. Это просто вопрос синтаксической ошибки. Я объявил typedef в своем заголовке и удалил его полностью из main.c. Благодаря! –

1

Вы должны определить ЬурейеЕ в файле заголовка , а затем включите заголовочный файл в файле C, который вы хотите использовать. Кроме того, поскольку это определение typedef и не объявление, вам необходимо определить его в файле C.
т.е. ч Файл:

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

с файла:

t_struct_type struct_var; 

, если вы хотите использовать struct_var более одного файла Си, вам нужно добавить extern ключевое слово в файле ч. например: extern t_strcut_type struct_var

+0

Был немного смущен вашим ответом. но +1 для рабочего решения. Я удалил все объявление typedef из основного класса и вместо этого объявил его в своем заголовочном файле. Я мог бы добавить, что im использует структуру как в основном, так и в handberaknare, не используя ключевое слово extern :) –