Include the directive in working with the program

I got a situation, I can not compile the program, as I split the files because I thought it was too big. After all files are merged into one, it works great. Now that I have separated them, the compiler tells me the following error:

||=== 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) ===|

      

It drives me crazy. I cannot get them to work when I split them. And I find it more organized, and I really want to do it.

I am deleting files, so you guys can check if you want.

The main.h header (the only header in the project. Although I had more than one for each .c file):

/**
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

      

-1


source to share


3 answers


It looks like the file include\allegro\alcompat.h

defines the same character ( fnt_datafile

, snd_datafile

) multiple times wherever you include it.

If they are for global bindings, they must be declared extern

in the header and defined in the same implementation file.



If they are methods, they must be declared inline

.

It works when there is only one file, because that means that only one translation unit is exporting those characters.

+1


source


Try to add guards like #pragma once

at the beginning of your header file, so at compile time it doesn't #included

.

Alternatively, you can specify



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

      

0


source


Each file probably doesn't include everything you need. With one big file, everything sees everything included.

You may need to add the missing ones to each file.

-1


source







All Articles