SDL-pikkupelini kääntyy muuten hyvin, mutta jokaista SDL_Surfacea kohden tulee 2 erroria:
(polku)\AppData\Local\Temp\cc8AGTvp.o:main.cpp:(.bss+0xc): multiple definition of (SDL_Surface) (polku)\AppData\Local\Temp\ccugrdrj.o:functions.cpp:(.bss+0xc): first defined here
Ja loppuun:
collect2: ld returned 1 exit status
Surfaceja on yht. 6 jotka on määritelty headerissa (functions.hpp):
SDL_Surface *surfacen_nimi = NULL;
Ne saavat lopulliset arvonsa alustusfunktiossa (functions.cpp):
surfacen_nimi = lataa_kuva("kuvatiedosto.bmp", false); // Sama funktio kuin c++-pelioppaassa
Mikä mättää? Kielenä siis C++ ja kääntäjänä g++.
Toivottavasti et liitä yhtään *.cpp tiedostoa muihin tiedostoihin se on väärin. Ainoastaan *.hpp tiedostot tulee liittää muihin tiedostoihin. Luultavasti myös muuttujien määrittely *.hpp tiedostossa on väärin, siellä pitäisi ainoastaan esitellä muuttujat.
Ongelmahan on lähinnä linkkausongelma, eikä niinkään käännöksestä johtuva.
//functions.hpp SDL_Surface* surfacen_nimi; extern SDL_Surface* toinen;
Sitten aikanaan funktiot.cpp:ä määrittelet nuo edellä esitellyt muuttujat.
//funktiot.cpp #include "funktiot.hpp" surfacen_nimi = lataa_kuva("kuvatiedosto.bmp", false); SDL_Surface* toinen = lataa_kuva("toinen.bmp", true);
Toisaalta tarvitseeko noita pintoja esitellä, vai voisivatko ne olla funktiot.cpp tiedoston omia staattisia osia. Muualla ohjelmassa niitä ei pitäisi tarvita ollenkaan.
Kiitos, tuo surfacejen siirto samaan filuun ja muuttaminen stattiisiksi auttoi.
Sinun pitää lukea koodivinkki monen tiedoston käytöstä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.