Witam, to mój pierwszy post tutaj więc proszę o wyrozumiałość.
Mam klasę* Okno* która ma składową statyczną (static
) - wskaźnik stały (const
) na obiekt klasy sf::RenderWindow .
\\Plik Okno.h
#include <SFML/Graphics.hpp>
#ifndef OKNO_H
#define OKNO_H
class Okno //okna w grze (og)
{
int posX, posY; //wspólrzedne lewego górnego rogu og
int width, height; //szerokosc i wysokosc og
static sf::RenderWindow * const wskOkna; //wsk na obiekt okna aplikacji
public:
Okno( int = 400, int = 150 );
void rysujOkno(); //rysowanie okna
};
#endif
Chcę inicjalizować ten wskaźnik adresem obiektu window. Definicja obiektu window jest w pliku main.cpp stąd extern
. Wyskakuje mi błąd undefined reference to `window' w ostatniej załączonej linii, przy próbie wywołania metody draw obiektu wskazywanego przez wskaźnik.
\\Plik Okno.cpp
#include "Okno.h"
extern sf::RenderWindow window;
sf::RenderWindow * const Okno::wskOkna = &window;
Okno::Okno( int w, int h )
{
posX = 40;
posY = 40;
width = w;
height = h;
}
void Okno::rysujOkno() //rysuje okno w grze
{
int rozmiarElRamki = 22; //rozmiar kafelka w sprajcie
sf::Texture tekstura;
tekstura.loadFromFile( "okno.png" );
sf::Sprite obraz;
obraz.setTexture( tekstura );
// rysowanie lewego górnego rogu okna
obraz.setTextureRect( sf::IntRect( rozmiarElRamki * 2, rozmiarElRamki, rozmiarElRamki, -rozmiarElRamki ) );
obraz.setPosition( sf::Vector2f( posX, posY ) );
wskOkna->draw( obraz ); // <<--- TU Pokazuje błąd
...
}
Proszę o podpowiedź co robię nie tak. Wskaźnik poprawnie pokazuje na obiekt window bo CodeBlocks widzi składowe tego obiektu. Skąd więc taki błąd?
Dodam, że wcześniej klasa wyglądała inaczej, tzn wskaźnik nie był statyczny i jednocześnie był inicjalizowany poprzez argument w konstruktorze. Wtedy zarówno metoda draw jak i cała funkcja rysujOkno mi działała.