[C++] Problem z plikami nagłówkowymi
Ostatnio zmodyfikowano 2009-09-16 07:56
programista12 Temat założony przez niniejszego użytkownika |
» 2009-09-15 18:08:17 ------ Build started: Project: MapEditor, Configuration: Release Win32 ------ Compiling... program.cpp e:\programowanie\c++\visual c++ 2008 ee\mapeditor\polskie_znaki.h(20) : warning C4309: 'initializing' : truncation of constant value e:\programowanie\c++\visual c++ 2008 ee\mapeditor\polskie_znaki.h(22) : warning C4309: 'initializing' : truncation of constant value main.cpp Linking... program.obj : error LNK2005: "struct ALLEGRO_BITMAP * puste" (?puste@@3PAUALLEGRO_BITMAP@@A) already defined in main.obj program.obj : error LNK2005: "struct ALLEGRO_BITMAP * kursor" (?kursor@@3PAUALLEGRO_BITMAP@@A) already defined in main.obj program.obj : error LNK2005: "struct ALLEGRO_MOUSE_STATE mouse_state" (?mouse_state@@3UALLEGRO_MOUSE_STATE@@A) already defined in main.obj program.obj : error LNK2005: "struct ALLEGRO_BITMAP * podloga" (?podloga@@3PAUALLEGRO_BITMAP@@A) already defined in main.obj program.obj : error LNK2005: "struct ALLEGRO_BITMAP * sciana" (?sciana@@3PAUALLEGRO_BITMAP@@A) already defined in main.obj program.obj : error LNK2005: "struct ALLEGRO_FONT * font_statystyki_myszki" (?font_statystyki_myszki@@3PAUALLEGRO_FONT@@A) already defined in main.obj program.obj : error LNK2005: "struct ALLEGRO_KEYBOARD_STATE key_state" (?key_state@@3UALLEGRO_KEYBOARD_STATE@@A) already defined in main.obj E:\Programowanie\C++\Visual C++ 2008 EE\MapEditor\Release\MapEditor.exe : fatal error LNK1169: one or more multiply defined symbols found Build log was saved at "file://e:\Programowanie\C++\Visual C++ 2008 EE\MapEditor\Release\BuildLog.htm" MapEditor - 8 error(s), 2 warning(s) ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
|
|
malan |
» 2009-09-15 19:34:20 Pomieszane to trochę ;p. Nie lepiej zrobić program.cpp + 2 plik (*.cpp i *.h/*.hpp) ? #ifndef FPROGRAM_H #define FPROGRAM_H
std::_Bool Inicjalizuj(); void Zamknij();
#endif
#include <allegro5/allegro5.h> #include <allegro5/a5_iio.h> #include <allegro5/a5_font.h> #include <allegro5/a5_ttf.h> #include <allegro5/a5_primitives.h> #include <string> #include <iostream> #include <ctime>
using namespace std;
ALLEGRO_BITMAP * kursor; ALLEGRO_BITMAP * sciana; ALLEGRO_BITMAP * podloga;
_Bool Inicjalizuj() { kursor = al_load_bitmap( "kursor.bmp" ); sciana = al_load_bitmap( "sciana.bmp" ); podloga = al_load_bitmap( "podloga.bmp" ); if( !kursor ) { cout << "Nie udalo sie wczytac obrazka 'kursor.bmp'!\n\n"; return false; } else { cout << "Wczytano obrazek 'kursor.bmp'.\n\n"; } if( !sciana ) { cout << "Nie udalo sie wczytac obrazka 'sciana.bmp'!\n\n"; return false; } else { cout << "Wczytano obrazek 'sciana.bmp'.\n\n"; } if( !podloga ) { cout << "Nie udalo sie wczytac obrazka 'podloga.bmp'!\n\n"; return false; } else { cout << "Wczytano obrazek 'podloga.bmp'.\n\n"; return false; } return true; }
#include "fprogram.h"
int main() { Inicjalizuj(); Zamknij(); }
|
|
malan |
» 2009-09-15 23:55:20 Mógłby dodać (includ-ować) bibliotekę, w której zdefiniowany jest typ _Bool do pliku *.h ;p. |
|
manfred |
» 2009-09-14 12:25:00 Zrób w nagłówkach tylko deklaracje zmiennych, zamiast pełne definicje... Kurde, to pytanie powtarza się co parę dni, nie można by odpowiedzi napisać raz a dobrze w FAQ? |
|
manfred |
» 2009-09-14 17:35:46 W pliku nagłówkowym: extern int foo; W jakimś pliku cpp (jednym!): int foo; Dlaczego w temacie jest "[Allegro]", skoro to nic wspólnego z Allegro nie ma? |
|
manfred |
» 2009-09-14 20:58:26 To jest AFAIK typedef w jakichś zakmarkach biblioteki standardowej by Dinkumware, równoznaczny z bool... Ale widocznie niektórzy lubią pisać namespace, scope operator i jakiś zarezerwowany dla kompilatora identyfikator zamiast krótkiego słowa kluczowego, nie wnikam... |
|
manfred |
» 2009-09-15 08:08:18 Takie buty - w takim razie jakiś głupi nagłówek zrobił #define bool... Pajac. Daj po zainclude'owaniu nagłówków |
|
manfred |
» 2009-09-15 19:30:51 Albo ciągle masz jakieś zmienne w nagłówkach (czyli patrz punkt 2, bo całe #include to tak naprawdę copy&paste), albo zrobiłeś definicję jakiejś zmiennej w więcej niż jednym pliku cpp... |
|
1 « 2 » 3 |