Błąd: "multiple definition of..."
Ostatnio zmodyfikowano 2011-07-18 18:51
imralav Temat założony przez niniejszego użytkownika |
Błąd: "multiple definition of..." » 2011-07-18 18:34:23 Cześć! Przejdę z miejsca do kodu: Plik "main.cpp" #include "gra.hpp"
using namespace std;
int main() { return 0; }
Plik "gra.cpp" #include "gra.hpp"
bool StartGry() { if( stan_gry != nie_rozpoczeta ) { return false; }; srand( time( NULL ) ); gracz =( rand() % 2 == 0 ? kolo : krzyz ); return true; }
Plik "gra.hpp" #ifndef _gra_hpp #define _gra_hpp
#include <iostream> #include <cstdlib> #include <ctime>
enum pola { puste, kolko, krzyzyk }; enum gamestate { nie_rozpoczeta, w_trakcie_wygrana_remis }; enum znak { kolo, krzyz };
pola plansza[ 3 ][ 3 ] = { { puste, puste, puste }, { puste, puste, puste }, { puste, puste, puste } }; gamestate stan_gry = nie_rozpoczeta; znak gracz;
bool StartGry();
#endif
Błąd jaki dostaję to: obj\Debug\gra.o||In function `Z8StartGryv':| D:\Tom\C++\kolko_krzyzyk_znow\gra.cpp|4|multiple definition of `plansza'| obj\Debug\main.o:D:\Tom\C++\kolko_krzyzyk_znow\main.cpp|8|first defined here| obj\Debug\gra.o||In function `Z8StartGryv':| D:\Tom\C++\kolko_krzyzyk_znow\gra.cpp|9|multiple definition of `stan_gry'| obj\Debug\main.o:d:\tom\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\iostream|72|first defined here| obj\Debug\gra.o||In function `Z8StartGryv':| D:\Tom\C++\kolko_krzyzyk_znow\gra.cpp|10|multiple definition of `gracz'| obj\Debug\main.o:D:\Tom\C++\kolko_krzyzyk_znow\main.cpp|10|first defined here| ||=== Build finished: 6 errors, 0 warnings ===|
|
Co przez to rozumiem? plansza, stan_gry, gracz zdefiniowane są wielokrotnie. Jednakże zrobiłem to tylko raz, w pliku "gra.hpp". Z czego to się bierze? Da się to obejść, czy może robię coś źle? Dodatkowo czy linijka gracz =( rand() % 2 == 0 ? kolo : krzyz );
na pewno zrobi to, co oczekuję, czyli: -wylosuj jedna cyfre, 1 albo 2 -dla 1 zmienna 'gracz' ma wartość 'kolo' a dla 2 'krzyz' ? Pozdrawiam, imralav. |
|
m4tx |
» 2011-07-18 18:49:09 Tak, zdefiniowałeś to w gra.hpp, ale dołączasz go dwa razy i stąd ten błąd. Chyba jedynym wyjściem, jakie Ci pozostaje, zdefiniować zmienne w jednym pliku, a w drugim zdefiniować je ponownie, poprzedzając je słowem kluczowym extern (czyli np. w jednym pliku int omg; , a w drugim extern int omg; ). na pewno zrobi to, co oczekuję, czyli: -wylosuj jedna cyfre, 1 albo 2 -dla 1 zmienna 'gracz' ma wartość 'kolo' a dla 2 'krzyz' ? |
Tak, z tym, że ta linijka wylosuje 0 albo 1 ;) Ale będzie to wtedy działać tak, jak mówisz. |
|
imralav Temat założony przez niniejszego użytkownika |
» 2011-07-18 18:51:37 Rozumiem, dzięki. |
|
« 1 » |