[c++] Błąd w podziale projektu na kilka plików


(Withorlo2) #1

Cześć, podzieliłem projekt na 3 pliki: main.cpp, funkcje.cpp i naglowki.hpp - z tym że ten projekt jest tworzony nie w czystym c++ tylko z biblioteką SDL i tutaj pierwszy raz spotkałem się z takim problemem, który zaraz opiszę bo w zwykłych projektach c++, które dzieliłem tak samo wszystko było spoko.

 

main.cpp:

#include "naglowki.hpp"

int main( int argc, char* args[] )
{
    otworzOkno();

    wyswietlanaGrafika = SDL_LoadBMP( "obraz.bmp" );
    SDL_BlitSurface( wyswietlanaGrafika, NULL, powierzchniaOkna, NULL );
    SDL_UpdateWindowSurface( oknoProgramu );
    SDL_Delay( 1000 );
    wyczyscPowierzchnie(powierzchniaOkna);

    zamknijOkno();
	return 0;
}

funkcje.cpp

#include "naglowki.hpp"
SDL_Window* oknoProgramu = NULL;
SDL_Surface* powierzchniaOkna = NULL;
SDL_Surface* wyswietlanaGrafika = NULL;

void otworzOkno()
{
    oknoProgramu = SDL_CreateWindow("OKNO",SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,300,150,0);
    powierzchniaOkna = SDL_GetWindowSurface( oknoProgramu );
}

void wyczyscPowierzchnie(SDL_Surface* powierzchnia)
{
    SDL_FreeSurface( powierzchnia );
	powierzchnia = NULL;
}

void zamknijOkno()
{
	SDL_DestroyWindow( oknoProgramu );
	oknoProgramu = NULL;

	SDL_Quit();
}

naglowki.hpp

#ifndef NAGLOWKI_HPP_INCLUDED
#define NAGLOWKI_HPP_INCLUDED

#include <SDL.h>
#include <stdio.h>

void otworzOkno();
void wyczyscPowierzchnie(SDL_Surface* powierzchnia);
void zamknijOkno();


#endif // NAGLOWKI_HPP_INCLUDED

Log errorów:

 

Podejrzewam że błąd tkwi w tych wskaźnikach na powierzchnie z funkcje.cpp ale po różnego rodzaju roszadach tych 3 linijek w różne pliki nadal pojawiały się błędy o mniej więcej tej samej tematyce/przyczynie i nie wiem jak mam podzielić mój kod żeby działał.


(enedil) #2

Nie jestem do końca pewien, ale chyba powinieneś w swoim pliku main.cpp przy każdej zmiennej zadeklarowanej w pliku nagłówkowym dodawać słowo 'extern'.


(Withorlo2) #3

Dzięki za pomoc enedil  :smiley:

Nie wiedziałem nawet że istnieje taki specyfikator.