Включить директиву, портящую программу

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

||=== 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 <patrickbassut@hotmail.com

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

3 ответа

Решение

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

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

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

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

Попробуйте добавить охрану, как #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 

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

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

Другие вопросы по тегам