[SFML 2.1] Poprawne linkowanie i zarządzanie kodem źródłowym
Ostatnio zmodyfikowano 2013-08-19 22:41
Solpatium Temat założony przez niniejszego użytkownika |
[SFML 2.1] Poprawne linkowanie i zarządzanie kodem źródłowym » 2013-08-19 22:05:04 Witam! Nie wiedziałem do jakiego działu wstawić ten temat, ponieważ raczej dotyczy on ogólnego C++ jednak błąd odnosi się do obiektu klasy z biblioteki SFML i zdecydowałem się wstawić go tutaj. Po zabawie z biblioteką SFML postanowiłem małymi kroczkami napisać grę opakowaną w klasy dbając o jak największą przejrzystość kodu(zawsze mam z tym problem). Używam Code::Blocks i MinGW. Przy kompilacji pliku "Zdarzenia.cpp" wyskakują błędy: error: 'OKNO' was not declared in this scope error: 'okno' was not declared in this scope error: 'okno' was not declared in this scope error: 'okno' was not declared in this scope
Wiem czemu wyskakują 3 ostatnie błędy, ale nie wiem jak to naprawić. Jeśli chodzi o pierwszy to już w ogóle nie mam pomysłu. Pliki: main.cpp #include <SFML/Graphics.hpp> #include <string> #include "Okno.hpp" #include "Zdarzenia.hpp"
int main() { Okno * okno = new Okno( 800, 600, false, "Test" ); while( okno->Chodzi() ) { okno->Czysc(); Zdarzenia * zdarzenia = new Zdarzenia; zdarzenia->Petla(); }; return 0; }
Okno.hpp #ifndef OKNO_H_INCLUDED #define OKNO_H_INCLUDED #include <SFML/Graphics.hpp> class Okno { public: sf::RenderWindow OKNO; Okno( int Szerokosc, int Dlugosc, bool Full, std::string Nazwa ) { if( Full ) OKNO.create( sf::VideoMode( Szerokosc, Dlugosc, 32 ), Nazwa, sf::Style::Fullscreen ); else OKNO.create( sf::VideoMode( Szerokosc, Dlugosc, 32 ), Nazwa ); }; ~Okno() { OKNO.close(); }; bool Zmien( int Szerokosc, int Dlugosc, bool Full, std::string Nazwa ); int JakaSzer(); int JakaDlug(); bool Rysuj(); void Czysc(); bool Chodzi(); };
#endif
Zdarzenia.hpp #ifndef ZDARZENIA_H_INCLUDED #define ZDARZENIA_H_INCLUDED #include "Okno.h" class Zdarzenia { public: sf::Event zdarzenie; void Petla(); }; #endif
Okno.cpp #include <SFML/Graphics.hpp> #include "Okno.hpp" #include "Zdarzenia.hpp"
void Okno::Czysc() { OKNO.clear( sf::Color::White ); }; bool Okno::Chodzi() { if( OKNO.isOpen() == true ) return true; else return false; };
Zdarzenia.hpp #include <SFML/Graphics.hpp> #include "Okno.hpp" #include "Zdarzenia.hpp" void Zdarzenia::Petla() { while( OKNO.pollEvent( zdarzenie ) ) { if( zdarzenie.type == sf::Event::Closed ) delete okno; if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Escape ) delete okno; if( zdarzenie.type == sf::Event::MouseButtonPressed && zdarzenie.mouseButton.button == sf::Mouse::Middle ) delete okno; }; };
Szukałem przy pomocy googla i szukajki forumowej, jednak nic nie znalazłem(możliwe, że po prostu nie wiem jak prawidłowo nazwać ten problem). |
|
Monika90 |
» 2013-08-19 22:28:20 OKNO nie jest w zakresie i niby dalczego miało by być w zakresie, kiedy jest to składowa klasy Okno a nie składowa klasy Zdarzenia. Mozesz np. przekazać okno jako argument do funkcji Petla. deklaracja: definicja: void Zdarzenia::Petla( Okno & okno ) { while( okno.OKNO.pollEvent( zdarzenie ) ) {
użycie: I nie używaj new, new nie jest dla początkujących, naprawdę... |
|
hincu |
» 2013-08-19 22:31:17 wiesz ze twoja klasa zdarzenie nie zawiera OKNO? przekaz je jako argument... anyway naucz sie moze dobrze OOP zanim wezniesz sie za cos wiekszego :q, nauka angielskiego tez nie zaszkodzi...
@up bylas szybsza :c |
|
Solpatium Temat założony przez niniejszego użytkownika |
» 2013-08-19 22:41:36 Okej, już rozumiem nad czym muszę popracować. Bardzo dziękuję za pomoc :) @up Cały czas uczę się angielskiego, aczkolwiek dokumentacje rozumiem bez problemów :) |
|
« 1 » |