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

Błąd: "multiple definition of..."

Ostatnio zmodyfikowano 2011-07-18 18:51
Autor Wiadomość
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"
C/C++
#include "gra.hpp"



using namespace std;

int main()
{
    return 0;
}

Plik "gra.cpp"
C/C++
#include "gra.hpp"

bool StartGry() // rozpoczęcie gry
{
    if( stan_gry != nie_rozpoczeta )
    {
        return false;
    };
    srand( time( NULL ) );
    gracz =( rand() % 2 == 0 ? kolo
        : krzyz );
    return true;
}
//bool Ruch( unsigned );// wykonanie ruchu
//bool RysujPlansze(); // rysowanie planszy

Plik "gra.hpp"
C/C++
#ifndef _gra_hpp
#define _gra_hpp
//dolaczenie potrzebnych bibliotek
#include <iostream>
#include <cstdlib>
#include <ctime>
//stworzenie nowych typow
enum pola { puste, kolko, krzyzyk };
enum gamestate { nie_rozpoczeta, w_trakcie_wygrana_remis };
enum znak { kolo, krzyz };
//stworzenie zmiennych
pola plansza[ 3 ][ 3 ] = { { puste, puste, puste }, { puste, puste, puste }, { puste, puste, puste } };
gamestate stan_gry = nie_rozpoczeta;
znak gracz;



bool StartGry(); // rozpoczęcie gry
//bool Ruch( unsigned );// wykonanie ruchu
//bool RysujPlansze(); // rysowanie planszy
#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
C/C++
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.

P-36212
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.
P-36214
imralav
Temat założony przez niniejszego użytkownika
» 2011-07-18 18:51:37
Rozumiem, dzięki.
P-36215
« 1 »
  Strona 1 z 1