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

[SFML 2.1] Poprawne linkowanie i zarządzanie kodem źródłowym

Ostatnio zmodyfikowano 2013-08-19 22:41
Autor Wiadomość
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
C/C++
#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
C/C++
#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 //OKNO_H_INCLUDED

Zdarzenia.hpp
C/C++
#ifndef ZDARZENIA_H_INCLUDED
#define ZDARZENIA_H_INCLUDED
#include "Okno.h"
class Zdarzenia {
public:
    sf::Event zdarzenie;
    void Petla();
};
#endif // ZDARZENIA_H_INCLUDED

Okno.cpp
C/C++
#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
C/C++
#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).
P-90573
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:
C/C++
void Petla( Okno & );
definicja:
C/C++
void Zdarzenia::Petla( Okno & okno ) { while( okno.OKNO.pollEvent( zdarzenie ) )
    {
        //... itd
użycie:
C/C++
zdarzenia.Petla( okno );

I nie używaj new, new nie jest dla początkujących, naprawdę...
P-90574
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
P-90577
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 :)
P-90578
« 1 »
  Strona 1 z 1