Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Problem z plikami nagłówkowymi

Ostatnio zmodyfikowano 2009-09-16 07:56
Autor Wiadomość
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 ==========
P-10253
malan
» 2009-09-15 19:34:20
Pomieszane to trochę ;p.

Nie lepiej zrobić program.cpp + 2 plik (*.cpp i *.h/*.hpp) ?

C/C++
//fprogram.h
#ifndef FPROGRAM_H
#define FPROGRAM_H

std::_Bool Inicjalizuj();
void Zamknij();

#endif
C/C++
//fprogram.cpp
#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;

//ZMIENNE
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;
}
C/C++
//program.cpp
#include "fprogram.h"

int main()
{
    Inicjalizuj();
    Zamknij();
}
P-10256
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.
P-10262
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?
P-19310
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?
P-19311
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...
P-19313
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
C/C++
#undef bool
P-19317
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...
P-19319
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona