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

Zmienne globalne a i wykorzystanie w plikach

Ostatnio zmodyfikowano 2011-02-05 09:32
Autor Wiadomość
WiecznyWem
Temat założony przez niniejszego użytkownika
Zmienne globalne a i wykorzystanie w plikach
» 2011-02-04 21:49:08
Witam. Piszę dalej mój projekt. Dziś zaszła mi potrzeba użycia zmiennych globalnych(wiem że powinno się unikać, ale nie mam lepszego pomysłu na to co potrzebuję rozwiązać). Opiszę może problem. W projekcie(jest to gra) mam system bonusów. Jeżeli gracz zdobędzie bonus, to zostaje nim obdarzony w konkretny sposób. Np. zdobywa bonus szybkości. Jego szybkość poruszania wzrasta X razy.  Ale jeżeli minie czas bonusu, to mnożnik X spada do 1(normalna prędkość). Założenie: prawie każdy atrybut ma swój mnożnik, który jest modyfikowany przez bonus.

W dobry sposób to robię? (tak dodatkowo pytam ;) może jest sprytniejszy sposób)

Przejdę teraz do kłopotu związanego ze zmiennymi globalnymi. 
Projekt jest podzielony na wiele plików.
Stworzyłem sobie plik "efekty.h", żeby przechowywać w nim mnożniki.
Załączyłem go do projektu, i do plików w których będzie używany.
Niestety gdy tworzę sobie zmienną np. "int X_PL_SPEED=1"(od razu nadaję jej podstawową wartość), i próbuję skompilować projekt, to w plikach w których ma zostać używa wyskakuje błąd linkera:

 error LNK2005: "int X_PL_SPEED" (?X_PL_SPEED@@3HA) already defined in [nazwa_pliku].obj
 Zaznaczę, że tam gdzie jest [nazwa_pliku], to jest to plik w którym plik "efekty.h" został zaincludowany.
Na koniec, linker opieprza mnie, że:
fatal error LNK1169: one or more multiply defined symbols found

Coś nie mogę sobie z tym jakoś poradzić, co robię nie tak? A może po prostu w zły sposób tworzę tą zmienną? Jeśli to ważne, mój kompilator: MS Visual C++ Express 2010
P-27813
malan
» 2011-02-04 21:54:58
C/C++
//wtf.h
#ifndef WTF_H
#define WTF_H

extern int WTF;

#endif
C/C++
//wtf.cpp
#include "wtf.h"

int WTF = 69;
C/C++
//main.cpp
#include <iostream>
#include "wtf.h"

int main()
{
    std::cout << WTF;
    return 0;
}
Coś takiego masz na myśli? :)
P-27814
michalp
» 2011-02-04 21:58:39
@malan: you are doing it wrong ;)
P-27815
malan
» 2011-02-04 22:01:01
@michalp: Why? :(
P-27817
michalp
» 2011-02-04 22:02:58
Po co ci extern w jednej jednostce kompilacji?
P-27818
WiecznyWem
Temat założony przez niniejszego użytkownika
» 2011-02-04 22:06:24
No akurat zmienna tworzyłem bez extern
Zrobiłem tak jak jest w przykładzie, lecz podczas ustawiania wartości w pliku *.cpp dzieje się coś takiego:
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
 Dla testu wymazałem linijkę, która przypisywała wartość do zmiennej, ale znowu linker ma świra.
error LNK2001: unresolved external symbol "int WTF" (?WTF@@3HA)
 
P-27819
ison
» 2011-02-04 22:06:28
you are do it wrong ;)
you are doing it wrong
P-27820
michalp
» 2011-02-04 22:08:37
@ison: masz mnie ;)
P-27821
« 1 » 2
  Strona 1 z 2 Następna strona