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

Pliki ,tablice i struktury/klasy

Ostatnio zmodyfikowano 2013-06-21 09:25
Autor Wiadomość
Alan468
Temat założony przez niniejszego użytkownika
Pliki ,tablice i struktury/klasy
» 2013-06-20 21:26:54
Witam,
Mam kolejny problem (smuci mnie ten fakt) ,a więc wczytuje dane z pliku do tablicy w strukturze/klasie ,zaraz po wczytaniu wyświetlam przykład i wszystko jest tak jak powinno ,ale gdy już wrócę do main() to zmienna przechowująca tekst z pliku nic nie wyświetla i nie rozmumiem jak zmienna "zapomina" co przechowywała ... .

main.cpp
C/C++
#include <SFML/Graphics.hpp>
#include <string>
#include <iostream>
#include <fstream>
#include <conio.h>
#include <sstream>
#include "zmienne.h"
#include "WczytywaniePliku.h"

using namespace std;
using namespace sf;


string IntToStr( int a ) {
    Zmienne MZ;
    MZ.ITS << a;
    MZ.text = MZ.ITS.str();
    return MZ.text;
}

int main()
{
    Zmienne MZ;
    WczytajPlik();
   
    MZ.tlomapy.loadFromFile( "data/DCMI/mapa.bmp" ); MZ.TloMapy.setTexture( MZ.tlomapy );
    MZ.zaznaczenie.loadFromFile( "data/DCMI/zaznaczenie.bmp" ); MZ.Zaznaczenie.setTexture( MZ.zaznaczenie );
    MZ.czcionka.loadFromFile( "arial.ttf" );
   
    MZ.PoleNrNap.setString( "Pole nr.: " );
    MZ.CzyGraczaNap.setString( "Czy gracza: " );
    MZ.CzyGraczaNap.setPosition( 750, 250 );
    MZ.CzyGraczaOdpNap.setPosition( 870, 250 );
    MZ.PoleNrNap.setPosition( 750, 200 );
    MZ.NumerNap.setPosition( 870, 200 );
   
    RenderWindow MapaGry( VideoMode( 1280, 720, 32 ), "Mapa Gry" /*, Style::Fullscreen*/ );
    while( MapaGry.isOpen() )
    {
        MZ.X_Myszy = MZ.Zdarzenie.mouseMove.x;
        MZ.Y_Myszy = MZ.Zdarzenie.mouseMove.y;
        MZ.Najechano_Na_Pole = 0;
        for( int y = 0; y <= 648; y = y + 72 ) { // Zaznaczenie pola//
            for( int x = 0; x <= 648; x = x + 72, MZ.Najechano_Na_Pole++ ) {
                if(( MZ.X_Myszy > x && MZ.X_Myszy <=( x + 72 ) ) &&( MZ.Y_Myszy > y && MZ.Y_Myszy <=( y + 72 ) ) )
                {
                    MZ.Zaznaczenie.setPosition( x, y );
                   
                    if( MZ.Najechano_Na_Pole != MZ.Wys ) {
                        if( MZ.Zdarzenie.type == Event::MouseButtonPressed && MZ.Zdarzenie.mouseButton.button == Mouse::Left ) {
                           
                            MZ.Kliknieto_N_Pole = MZ.Najechano_Na_Pole;
                            MZ.NumerNap.setString( IntToStr( MZ.Kliknieto_N_Pole ) );
                           
                            MZ.CzyGraczaOdpNap.setString( MZ.Czy_Gracza[ MZ.Kliknieto_N_Pole ] );
                            MZ.Wys = MZ.Najechano_Na_Pole;
                           
                            cout << "[PRZYKLAD]Numer pola: " << MZ.Kliknieto_N_Pole << " ." << endl;
                            cout << "[PRZYKLAD]Czy gracza: " << MZ.Czy_Gracza[ MZ.Kliknieto_N_Pole ] << " ." << endl;
                           
                        }
                       
                    } } }
           
            while( MapaGry.pollEvent( MZ.Zdarzenie ) ) {
                if( Event::KeyPressed && MZ.Zdarzenie.key.code == Keyboard::Escape ) { MapaGry.close(); }
                if( MZ.Zdarzenie.type == Event::Resized ) { MapaGry.setSize( Vector2u( 1280, 720 ) ); }
            }
        }
       
        MapaGry.clear();
       
        MapaGry.draw( MZ.TloMapy );
        MapaGry.draw( MZ.Zaznaczenie );
       
        MapaGry.draw( MZ.PoleNrNap );
        MapaGry.draw( MZ.NumerNap );
        MapaGry.draw( MZ.CzyGraczaNap );
        MapaGry.draw( MZ.CzyGraczaOdpNap );
       
        MapaGry.display();
    }
   
}

WczytywaniePliku.h
C/C++
#ifndef WczytywaniePliku_HPP
#define WczytywaniePliku_HPP

#include <string>
#include <iostream>
#include <fstream>
#include "zmienne.h"

using namespace std;

void WczytajPlik()
{
    Zmienne MZ;
   
    fstream Plik_Z_Danymi;
    Plik_Z_Danymi.open( "properties.txt", ios::in );
    cout << "Wczytywanie danych..." << endl;
    if( Plik_Z_Danymi.good() == true )
    {
        std::cout << "Uzyskano dostep do pliku!" << std::endl;
        for( int Nr_Pola = 0; Nr_Pola < 100; Nr_Pola++ )
        {
            Plik_Z_Danymi >> MZ.Nazwa_Pola[ Nr_Pola ] >> MZ.Czy_Gracza[ Nr_Pola ] >> MZ.Czy_M_Atakowac[ Nr_Pola ] >> MZ.Nazwa_Misji[ Nr_Pola ];
            if( MZ.Nazwa_Pola[ Nr_Pola ] == "endfile" ) { cout << endl << "Przerwano " << endl; break; }
        }
       
        cout << "[PRZYKLAD]Numer pola: 88 ." << endl;
        cout << "[PRZYKLAD]Czy gracza: " << MZ.Czy_Gracza[ 87 ] << " ." << endl;
       
        cout << "Wczytano." << endl;
       
    }
   
}
#endif

zmienne.h
C/C++
#ifndef ZMIENNE_H
#define ZMIENNE_H

#include <string>

using namespace std;
using namespace sf;
struct Zmienne
{ //public:
    Texture tlomapy;
    Texture zaznaczenie;
   
    ostringstream ITS;
   
    Sprite TloMapy;
    Sprite Zaznaczenie;
   
    Text PoleNrNap, NumerNap; //////////////
    Text CzyGraczaNap, CzyGraczaOdpNap;
    Text CzyMAtakowacNap, CzyMAtakowacOdpNap;
    Text NazwaMisji, NazwaMisjiOdp;
   
    std::string Nazwa_Pola[ 100 ];
    std::string Czy_Gracza[ 100 ];
    std::string Czy_M_Atakowac[ 100 ];
    std::string Nazwa_Misji[ 100 ];
    std::string text;
   
    int Najechano_Na_Pole;
    int Kliknieto_N_Pole;
    int Wys;
   
    int X_Myszy;
    int Y_Myszy;
   
    Event Zdarzenie;
    Font czcionka;
   
   
};

#endif // ZMIENNE_H
P-85875
pjpeg_objected
» 2013-06-20 23:15:38
Problem występuje, ponieważ tworzysz obiekt
Zmienne MZ
 w funkcji i jest on dostępny tylko lokalnie (z poziomu funkcji). A drugi obiekt który tworzysz w mainie nie jest już tym samym obiektem chociaż ma taką samą nazwę.
P-85889
Alan468
Temat założony przez niniejszego użytkownika
» 2013-06-21 08:20:16
Czy wystarczyło by zmienić
Zmienne MZ;
 na na przykład
Zmienne MZ2;
 tylko w funkcji wczytującej plik (i w innych funkcjach też zmienić na jeszcze inne) a w main() zostawić
Zmienne MZ;
 lecz dalej nic :/
P-85900
pjpeg_objected
» 2013-06-21 08:53:37
Nie w tym rzecz. Takie coś spowoduje że będziesz tworzył różne obiekty. W mainie powinieneś stworzyć
Zmienne MZ
 i przekazać je poprzez referencje do funkcji. Dzięki temu cały czas będziesz pracował na tym samym obiekcie. Polecam przeczytać, może Ci się trochę rozjaśni: » Kurs C++ » Poziom 3Przekazywanie argumentów funkcji przez referencję lekcja
P-85902
Alan468
Temat założony przez niniejszego użytkownika
» 2013-06-21 09:25:30
Dzięki :) Wielkie dzięki :)
P-85903
« 1 »
  Strona 1 z 1