2012-06-16 2 views
-1

У меня возникла ситуация, я не могу скомпилировать программу, так как я разбил файлы, потому что думал, что она слишком большая. Как только файлы объединены в один, он отлично работает. Теперь, когда я разделил их, компилятор дает мне следующую ошибку:Включите директиву, испортив программу

||=== Snake_Game, Debug ===| 
D:\Projects\Snake_Game\Graph_Funcs.c||In function 'snake_crashed':| 
D:\Projects\Snake_Game\Graph_Funcs.c|24|warning: 'textprintf_centre' is deprecated (declared at c:\program files (x86)\codeblocks\mingw\bin\../lib/gcc/mingw32/4.4.1/../../../../include/allegro/alcompat.h:178)| 
D:\Projects\Snake_Game\Graph_Funcs.c||In function 'read_string':| 
D:\Projects\Snake_Game\Graph_Funcs.c|91|warning: 'textout' is deprecated (declared at c:\program files (x86)\codeblocks\mingw\bin\../lib/gcc/mingw32/4.4.1/../../../../include/allegro/alcompat.h:157)| 
D:\Projects\Snake_Game\Highscore.c||In function 'set_hscore':| 
D:\Projects\Snake_Game\Highscore.c|30|warning: implicit declaration of function 'sort_scores'| 
D:\Projects\Snake_Game\Menus.c||In function 'option_menu':| 
D:\Projects\Snake_Game\Menus.c|114|warning: 'textprintf_centre' is deprecated (declared at c:\program files (x86)\codeblocks\mingw\bin\../lib/gcc/mingw32/4.4.1/../../../../include/allegro/alcompat.h:178)| 
D:\Projects\Snake_Game\Menus.c|115|warning: 'textprintf_centre' is deprecated (declared at c:\program files (x86)\codeblocks\mingw\bin\../lib/gcc/mingw32/4.4.1/../../../../include/allegro/alcompat.h:178)| 
D:\Projects\Snake_Game\Menus.c|116|warning: 'textprintf_centre' is deprecated (declared at c:\program files (x86)\codeblocks\mingw\bin\../lib/gcc/mingw32/4.4.1/../../../../include/allegro/alcompat.h:178)| 
D:\Projects\Snake_Game\Menus.c|117|warning: 'textprintf_centre' is deprecated (declared at c:\program files (x86)\codeblocks\mingw\bin\../lib/gcc/mingw32/4.4.1/../../../../include/allegro/alcompat.h:178)| 
D:\Projects\Snake_Game\Menus.c|118|warning: 'textprintf_centre' is deprecated (declared at c:\program files (x86)\codeblocks\mingw\bin\../lib/gcc/mingw32/4.4.1/../../../../include/allegro/alcompat.h:178)| 
D:\Projects\Snake_Game\GamePlay.c||In function 'game_play':| 
D:\Projects\Snake_Game\GamePlay.c|59|warning: 'textprintf_centre' is deprecated (declared at c:\program files (x86)\codeblocks\mingw\bin\../lib/gcc/mingw32/4.4.1/../../../../include/allegro/alcompat.h:178)| 
obj\Debug\Highscore.o||In function `check_hscore':| 
D:\Projects\Snake_Game\Highscore.c|13|multiple definition of `img_datafile'| 
obj\Debug\Graph_Funcs.o:c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\allegro\alcompat.h|32|first defined here| 
obj\Debug\Highscore.o||In function `check_hscore':| 
D:\Projects\Snake_Game\Highscore.c|14|multiple definition of `snd_datafile'| 
obj\Debug\Graph_Funcs.o:c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\allegro\alcompat.h|32|first defined here| 
obj\Debug\Highscore.o||In function `check_hscore':| 
D:\Projects\Snake_Game\Highscore.c|14|multiple definition of `fnt_datafile'| 
obj\Debug\Graph_Funcs.o:c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\allegro\alcompat.h|33|first defined here| 
obj\Debug\Init_Stuff.o||In function `init_allegro':| 
D:\Projects\Snake_Game\Init_Stuff.c|14|multiple definition of `img_datafile'| 
obj\Debug\Graph_Funcs.o:c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\allegro\alcompat.h|32|first defined here| 
obj\Debug\Init_Stuff.o||In function `init_allegro':| 
D:\Projects\Snake_Game\Init_Stuff.c|14|multiple definition of `snd_datafile'| 
obj\Debug\Graph_Funcs.o:c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\allegro\alcompat.h|32|first defined here| 
obj\Debug\Init_Stuff.o||In function `init_allegro':| 
D:\Projects\Snake_Game\Init_Stuff.c|15|multiple definition of `fnt_datafile'| 
obj\Debug\Graph_Funcs.o:c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\allegro\alcompat.h|33|first defined here| 
obj\Debug\Menus.o||In function `main_menu':| 
D:\Projects\Snake_Game\Menus.c|13|multiple definition of `img_datafile'| 
obj\Debug\Graph_Funcs.o:c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\allegro\alcompat.h|32|first defined here| 
obj\Debug\Menus.o||In function `main_menu':| 
D:\Projects\Snake_Game\Menus.c|13|multiple definition of `snd_datafile'| 
obj\Debug\Graph_Funcs.o:c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\allegro\alcompat.h|32|first defined here| 
obj\Debug\Menus.o||In function `main_menu':| 
D:\Projects\Snake_Game\Menus.c|14|multiple definition of `fnt_datafile'| 
obj\Debug\Graph_Funcs.o:c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\allegro\alcompat.h|33|first defined here| 
obj\Debug\main.o||In function `mangled_main':| 
D:\Projects\Snake_Game\main.c|12|multiple definition of `img_datafile'| 
obj\Debug\Graph_Funcs.o:c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\allegro\alcompat.h|32|first defined here| 
obj\Debug\main.o||In function `mangled_main':| 
D:\Projects\Snake_Game\main.c|12|multiple definition of `snd_datafile'| 
obj\Debug\Graph_Funcs.o:c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\allegro\alcompat.h|32|first defined here| 
obj\Debug\main.o||In function `mangled_main':| 
D:\Projects\Snake_Game\main.c|13|multiple definition of `fnt_datafile'| 
obj\Debug\Graph_Funcs.o:c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\allegro\alcompat.h|33|first defined here| 
obj\Debug\Algorithms.o||In function `qsort_helper_by_score':| 
D:\Projects\Snake_Game\Algorithms.c|13|multiple definition of `img_datafile'| 
obj\Debug\Graph_Funcs.o:c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\allegro\alcompat.h|32|first defined here| 
obj\Debug\Algorithms.o||In function `qsort_helper_by_score':| 
D:\Projects\Snake_Game\Algorithms.c|14|multiple definition of `snd_datafile'| 
obj\Debug\Graph_Funcs.o:c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\allegro\alcompat.h|32|first defined here| 
obj\Debug\Algorithms.o||In function `qsort_helper_by_score':| 
D:\Projects\Snake_Game\Algorithms.c|14|multiple definition of `fnt_datafile'| 
obj\Debug\Graph_Funcs.o:c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\allegro\alcompat.h|33|first defined here| 
obj\Debug\GamePlay.o||In function `game_play':| 
D:\Projects\Snake_Game\GamePlay.c|13|multiple definition of `img_datafile'| 
obj\Debug\Graph_Funcs.o:c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\allegro\alcompat.h|32|first defined here| 
obj\Debug\GamePlay.o||In function `game_play':| 
D:\Projects\Snake_Game\GamePlay.c|13|multiple definition of `snd_datafile'| 
obj\Debug\Graph_Funcs.o:c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\allegro\alcompat.h|32|first defined here| 
obj\Debug\GamePlay.o||In function `game_play':| 
D:\Projects\Snake_Game\GamePlay.c|13|multiple definition of `fnt_datafile'| 
obj\Debug\Graph_Funcs.o:c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\allegro\alcompat.h|33|first defined here| 
ld.exe||cannot find -lalleg| 
||=== Build finished: 37 errors, 9 warnings (0 minutes, 1 seconds) ===| 

Это сводит меня с ума. Я не могу заставить их работать, когда я их разделяю. И я нахожу это более организованным, И я действительно хочу это сделать.

Я распоряжаюсь файлами, поэтому вы, ребята, можете проверить, хотите ли вы.

Заголовок main.h (только заголовок в проекте Хотя у меня было больше, чем один для каждого .c файла.):

/** 
Snake-Game: 
A remake of the mobile game from nokia(don't know what model) 
Made by Patrick Farias Bassut Souza <[email protected] 

File: main.h 
**/ 

#ifndef MAIN_H 
#define MAIN_H 

#include <stdio.h> 
#include <stdlib.h> 
#include <allegro.h> 
#include <string.h> 
#include <time.h> 
#include "Images.h" 
#include "Fonts.h" 
#include "Sounds.h" 

#define WINDOW_TITLE "Snake Game by Patrick Bassut" 
#define VIDEO_CARD GFX_AUTODETECT_WINDOWED 
#define MAX_X  800 
#define MAX_Y  600 
#define V_MAX_X  0 
#define V_MAX_Y  0 
#define COLOR_BITS 32 
#define DIGI_CARD DIGI_AUTODETECT 
#define MIDI_CARD MIDI_AUTODETECT 

#define WHITE makecol(255, 255, 255) 
#define BLACK makecol(0, 0, 0) 
#define PINK makecol(255, 0, 255) 
#define RED makecol(255, 0, 0) 
#define BLUE makecol(0, 0, 255) 

#define NORTH 0 
#define EAST 1 
#define SOUTH 2 
#define WEST 3 

#define LEFT_BORDER 18 
#define RIGHT_BORDER 766 
#define TOP_BORDER -13 
#define BOTTOM_BORDER 577 

#define WALL_COLLISION 0 
#define ITSELF_COLLISION 1 
#define FOOD_COLLISION 2 

#define INIT_SPEED 200 

#define START_TAILS 2 


typedef enum{false, true}bool; 

typedef struct _POS{ 
    int x; 
    int y; 
}Pos; 

typedef struct _config{ 
    int resolutionx; 
    int resolutiony; 
    bool window_mode; 
    bool changed; 
    bool music; 
    bool sound; 
    int volume; 
}tConfig; 

typedef struct _snake{ 
    Pos pos; 
    int prev_snake_pos_x[400]; // Váriavel usada para 'guardar' os rastros X da snake. 
    int prev_snake_pos_y[400]; // Váriavel usada para 'guardar' os rastros Y da snake. 
    int tails_number; 
    int direction; 
    int speed; 
}tSnake; 

typedef struct _game{ 
    tConfig cur_cfg; 
    Pos possible_food[24]; 
    Pos food; 
    int food_type; 
    int points; 
    float speed_food_time; 
    Pos spr; 
    bool is_paused; 
    bool is_playing; 
}tGame; 

typedef struct _Score 
{ 
    int player_score; 
    char player_name[11]; 
}Score; 

tSnake player; 
tGame game; 
DATAFILE *imggg_datafile = NULL; 
DATAFILE *snd_datafile = NULL; 
DATAFILE *fnt_datafile = NULL; 
Score score_table[11]; 

int qsort_helper_by_score(const void *e1, const void *e2); 
bool check_collision(int collision_type); 
BITMAP *new_food(); 
inline void close_game(); 
void game_play(); 
void snake_crashed(int points); 
void game_introduction(); 
void read_string(char *str_to, int x, int y, int size); 
void fadein(BITMAP *bmp_orig, int speed, int until); 
void fadeout(int speed, int until); 
inline bool check_hscore(int points); 
bool load_scores(); 
bool save_scores(); 
void show_hscore_list(char *name); 
void set_hscore(); 
bool init_allegro(); 
bool init_game(); 
bool init_settings(); 
int main_menu(); 
void option_menu(); 
void apply_settings(tConfig new_config); 

#endif 
+0

Вы уверены, что вы хотите '.c' файлы, а не' .cpp'? – chris

+0

Покажите нам свой код, в противном случае это трудно ответить, где ошибка. – tune2fs

+0

Мое предположение: вы не используете * защитники заголовка *. Но это поможет, если вы минимизируете проблему: найдите наименьший раскол, который вызывает проблему, а наибольший - нет, и посмотрите на разницу. – Beta

ответ

1

Похоже, что файл include\allegro\alcompat.h является определение того же символа (fnt_datafile, snd_datafile) несколько раз, где бы вы его не включали.

Если они предназначены для глобальных привязок, они должны быть объявлены extern в заголовке и определены в одном файле реализации.

Если это методы, они должны быть объявлены inline.

Это работает, когда есть только один файл, потому что это означает, что только одна единица перевода экспортирует эти символы.

+0

Ну, я изменил файл fnt_datafile на fnttt_datafile, и это была та же ошибка. –

+1

@PatrickBassut Я никогда не говорил, добавляю два 't' в имени ... –

+0

Только что прочитал две строки, которые вы сказали дальше. И почему они должны быть объявлены встроенными, если они являются глобальными методами? –

-1

В каждом файле, возможно, не включая все, что нужно С одним большим файлом, все см. все включено.

Возможно, вам нужно будет добавить отсутствующие включенные в каждом spitted файлы.

+0

это теория, которую я уже пробовал. Но возможно, я сделал это неправильно. Итак, я дам ему еще одну попытку и опубликую результаты. –

+0

-1 Каждый файл ** должен ** включать все, что ему нужно. –

+0

@luchian Что я имел в виду. Каждый из них должен теоретически включать в себя все, что ему нужно, но это не так, вероятно, после того, как он разделил файл. – mb14

0

Попробуйте добавить охранники, как #pragma once, в начале вашего файла заголовка, поэтому это не #included несколько раз во время компиляции.

В качестве альтернативы, вы можете указать

#ifndef _SNAKE_GAME.H // or any label you want 
#define _SNAKE_GAME.H 
//All other code of header file goes here 
#endif 
+0

Я попробую директиву #pragma. О защитниках заголовков я уже сделал это. –

+0

Прошу прощения. Вы сказали альтернативно. Итак, я занимаюсь защитой заголовков. –

+0

Почему это проголосовало? Downvoter, следите за комментариями? – marton78

Смежные вопросы