include directive messing up with the program

2019-09-20 16:08发布

I got a situation, I can't get a program compile since I splitted the files cause i thought it was too big. Once the files is all merged in one, it works perfectly. Now that i splitted them, the compiler gives 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) ===|

This is driving me crazy. I can't get these to work when I split them. And I find it a more organized thing, And I really wanna do it.

I'm dispose the files, so you guys can check out if you want.

Header main.h(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

3条回答
手持菜刀,她持情操
2楼-- · 2019-09-20 16:19

Try adding guards,like #pragma once, at the beginning of your header file, so it is not #included multiple time during compilation.

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 
查看更多
我只想做你的唯一
3楼-- · 2019-09-20 16:29

It looks like the file include\allegro\alcompat.h is defining the same symbol (fnt_datafile, snd_datafile) multiple times, wherever you include it.

If these are meant to be globals, they should be declared extern in the header and defined in a single implementation file.

If they're methods, they should be declared inline.

It works when there's just one file because that means just one translation unit exporting those symbols.

查看更多
地球回转人心会变
4楼-- · 2019-09-20 16:31

Each files are probably not including everything they needs With one big file, everything see all of the includes.

You might need to add the missing includes in every spitted files.

查看更多
登录 后发表回答