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

[C++] Błąd przy kompilacji ( error LNK2019 fatal error LNK1120)

Ostatnio zmodyfikowano 2014-02-22 17:01
Autor Wiadomość
Haker123
Temat założony przez niniejszego użytkownika
[C++] Błąd przy kompilacji ( error LNK2019 fatal error LNK1120)
» 2014-02-20 19:50:25
Witam.

Przy sprawdzaniu kodu dostalem 2 dziwne bledy których nie rozumiem.


1>Labirynt.obj : error LNK2019: unresolved external symbol "public: bool __thiscall Labirynt::Wypisz_pliki(class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > >,int &)" (?Wypisz_pliki@Labirynt@@QAE_NV?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@AAH@Z) referenced in function "public: bool __thiscall Labirynt::EDITION(void)" (?EDITION@Labirynt@@QAE_NXZ)
1>D:\Programowanie\Projekty - Programy\Moje\MiX\Debug\MiX.exe : fatal error LNK1120: 1 unresolved externals

Błędy pojawily sie kiedy kombinowalem jak wyslac vector <string> (lub <char>) przez referencje do funkcji Wypisz_pliki, a kombinowalem dlatego ze w tej funkcji przy wpisywaniu danych do vektora wyskakiwaly mi bledy zlego typu (char do char[261]).

W internecie znalazłem informacje że mogłem wybrać zły typ projektu a wybrałem pusty projekt.
Korzystam z Microsoft Visual C++ 2010 Express.

Plik Labirynt.h
C/C++
#ifndef LABIRYNT_H
#define LABIRYNT_H

#include <string>
#include <vector>
#include <dirent.h>

using namespace std;

class Labirynt
{
public:
   
    //STAN GRY
    enum MODE
    {
        M_EXIT,
        M_WIN,
        M_EDIT,
        M_GAME
    } TRYB;
   
    //ZMIENNA PRZECHOWUJACA ZNAKI NA PLANSZY
    enum SINGS
    {
        GRACZ = '$',
        TLO = ' ',
        SCIANA1 = '|',
        SCIANA2 = '-',
        META = '@',
        EDIT = '#',
        CHECK = '*'
    };
   
    //KONSTRUKTOR
    Labirynt()
        : iLicznik( 0 )
        , TRYB( M_EXIT )
    { }
   
    //WYNKCJA RYSUJACA PLANSZE
    bool Narysuj();
   
    //FUNKCJA WYKONUJACA RUCH GRACZA
    bool Ruch();
   
    //EDYTOR PLANSZ
    //void Edytor(SINGS POMOCNA[][20]) ;
   
    //ROBIMY NOWA MAPE
    bool NEW();
   
    //EDYCJA STAREJ MAPY
    bool EDITION();
   
    //SPRAWDZA CZY MOZNA UKONCZYC LABIRYNT
    bool CHECKS();
   
    //KASUJ MAPE
    void DELET_MAP();
   
    //WYPISUJE PLIKI Z FOLDERU ORAZ WYBIERA
    bool Wypisz_pliki( vector < string > SPIS, int & wyb );
   
private:
   
    //STRUKTURA PRZECHOWUJACA POZYCJE GRACZA, METY, WSKAZNIKA EDYCJI NA PLANSZY
    struct Pozycja
    {
        int x;
        int y;
    } sGracz, sWskaznik, sMeta;
   
    int iLicznik; //ZMIENNA PRZECHOWUJACA ILOSC RUCHOW GRACZA NA PLANSZY
   
    //STRUKTURA Z PLANSZA I JEJ NAZWA
    struct sDanePlanszy
    {
        char cNazwaPlanszy[ 100 ];
        SINGS PLANSZA[ 20 ][ 20 ];
    } sPlansza, sDodatkowa;
   
    //POBIERANIE NAZWY PLIKU
    bool NazwaPliku();
   
    //POBIERANIE DANYCH O MAPIE (POLA ITP.)
    bool OtworzPlik();
};
#endif

Plik Labirynt.cpp
C/C++
#include <iostream>
#include <string>
#include <vector>
#include <iomanip>
#include <conio.h>
#include <fstream> //OPERACJE NA PLIKACH
#include <ctime> //BIBLIOTEKA CZASU
#include <dirent.h> //BIBLIOTEKA PRZESZUKIWANIA PLIKOW
#include <cstdio> //SRAND    STRCPY
#include "Labirynt.h"

using namespace std;

//FUNKCJA CENTRUJACA WPISANY TEKST
string center( std::string input, int width )
{
    return std::string(( width - input.length() ) / 2, ' ' ) + input;
}

//SPRAWDZA POPRAWNOSC cin I ZWRACA LICZBE -1
bool zab_cin( int & wyb )
{
    do
    {
        cin.clear(); //CZYSCI FLAGI BLEDU
        cin.sync(); //CZYSCI BUFOR Z POZOSTALYCH ZNAKOW
       
        cin >> wyb;
        if( cin.good() ) break;
       
        cout << "\nTO NIE CYFRA.\n\tNUMER: ";
    } while( true );
   
    wyb--;
    return true;
}

int Random( int nMin, int nMax )
{
    return rand() %( nMax - nMin + 1 ) + nMin;
}

bool Labirynt::NazwaPliku()
{
    //URUCHOMIENIE LOSOWANIA LICZBY
    srand( static_cast < unsigned int >( time( NULL ) ) );
   
    vector < string > NazwyPlikow;
   
    DIR * pdir = NULL; //WSKAZNIK SCIEZKI
   
    struct dirent * ps_dirent = NULL; //PRZECHOWUJE DANE O PLIKU. readdir ZWRACA STRUKTURE dirent
   
    pdir = opendir( ".\\Maps" ); //OTWIERANIE SCIEZKI ////////O ILE ZADZIALA TAKA
   
    if( pdir )
    {
        while( ps_dirent = readdir( pdir ) )
        {
            /*string a = ps_dirent->d_name ;
            unsigned ilosc = a.find_last_of(".") + 1;
            a = a.substr(ilosc) ;
           
            if(a == "dat")    //WLASNE ROZSZEZENIE*/
           
            //strstr PRZESZUKUJE 1 const char * I SZUKA W NIM 2 const char * ZWRACA const char * LUB NULL JESLI NIC NIE ZNAJDZIE
            if( !( strstr( ps_dirent->d_name, "adi" ) == NULL ) )
                 NazwyPlikow.push_back( ps_dirent->d_name );
           
            if( NazwyPlikow.empty() )
            {
                cout << "W katalogu \"Maps\" nie ma zadnych map.\n";
                getch();
                return false;
            }
           
            //LOSUJEMY LICZBE Z PRZEDZIALU OD 0 DO WIELKOSCI POBRANYCH NAZW PLIKOW
            int i = Random( 0, NazwyPlikow.size() );
           
            //KOPIUJEMY TABLICE CHAR Z NazwyPlikow DO TABLICY CHAR cNazwaPlanszy
            strcpy( sPlansza.cNazwaPlanszy, NazwyPlikow[ i ].c_str() );
           
        }
    }
    else
    {
        cout << "\t Nie mozna otworzyc sciezki do Maps. Plik moze nie istniec lub byc poza glownym folderem.\n";
        getch();
        return false;
    }
   
    closedir( pdir ); //ZAMYKAMY SCIEZKE
    return true;
}

bool Labirynt::OtworzPlik()
{
    string lokalizacja = "Maps\\";
    lokalizacja = lokalizacja + sPlansza.cNazwaPlanszy;
   
    ifstream strumien( lokalizacja.c_str(), ios::in | ios::binary );
   
    if( strumien )
    {
        strumien.read( reinterpret_cast < char *>( & sPlansza ), sizeof( sPlansza ) );
        /*char bufor ;
        for(int y = 0 ; y < 20 ; y++) //WIERSZE
        for(int x = 0 ; x < 20 ; x++) //KOLUMNY
        {
        strumien >> bufor ; //PRZYPISANIE DANYCH Z PLIKU DO bufora
        Mapa.PLANSZA[y][x] = static_cast<SINGS>(bufor) ;
        }*/
    }
    else
    {
        cout << "BLAD OTWARCIA PLIKU.";
        getch();
        strumien.clear(); //CZYSZCZENIE STRUMIENIA Z BLEDOW
        strumien.close();
        return false;
    }
   
    for( int y = 0; y < 20; y++ ) //WIERSZ
    for( int x = 0; x < 20; x++ ) //KOLUMNA
    {
        if( sPlansza.PLANSZA[ y ][ x ] == '@' )
        {
            sMeta.y = y;
            sMeta.x = x;
        }
       
        if( sPlansza.PLANSZA[ y ][ x ] == '$' )
        {
            sGracz.y = y;
            sGracz.x = x;
        }
    }
   
    strumien.clear();
    strumien.close();
    return true;
}

bool Labirynt::Narysuj()
{
    switch( TRYB )
    {
    case M_EXIT:
        //WYBIERANIE PLANSZY
        if( NazwaPliku() && OtworzPlik() )
             TRYB = M_GAME;
        else
             return false;
       
        break;
       
    case M_GAME:
       
        system( "cls" );
       
        cout << string( 40, '*' )
        << "\n*" << center( "Gra LABIRYNT", 38 ) << "*\n"
        << string( 40, '*' ) << endl;
       
        //GORA MAPY
        cout << "\n\n\n\t" << string( 22, '*' ) << endl;
       
        //WIERSZE
        for( int y = 0; y < 20; y++ )
        {
            cout << "\t*";
            //POLA WIERSZA
            for( int x = 0; x < 20; x++ )
                 cout << static_cast < char >( sPlansza.PLANSZA[ y ][ x ] );
           
            cout << "*\n";
        }
       
        //DOL MAPY
        cout << "\t" << string( 22, '*' ) << "\n\n\n" << endl;
       
        cout << "\t\tLEGENDA\n"
        << "'$'     GRACZ"
        << "\t'@'     META\n"
        << "'|'\tSCIANY\t'-'\n"
        << "PORUSZASZ SIE STRZALKAMI\n"
        << "Wykonales " << iLicznik << " ruchow.";
       
        break;
       
    case M_WIN:
       
        system( "cls" );
       
        cout << string( 40, '*' )
        << "\n*" << center( "Gra LABIRYNT", 38 ) << "*\n"
        << string( 40, '*' ) << endl;
       
        //GORA MAPY
        cout << "\n\n\n\t" << string( 22, '*' ) << endl;
       
        //WIERSZE
        for( int y = 0; y < 20; y++ )
        {
            cout << "\t*";
            //POLA WIERSZA
            for( int x = 0; x < 20; x++ )
                 cout << static_cast < char >( sPlansza.PLANSZA[ y ][ x ] );
           
            cout << "*\n";
        }
       
        //DOL MAPY
        cout << "\t" << string( 22, '*' ) << "\n\n\n" << endl;
       
       
        cout << "Przeszles labirynt w " << iLicznik << " ruchow.";
        break;
       
    case M_EDIT:
       
        system( "cls" );
       
        cout << string( 40, '*' )
        << "\n*" << center( "EDYTOR", 38 ) << "*\n"
        << string( 40, '*' ) << endl;
       
        //GORA MAPY
        cout << "\n\n\n\t" << string( 22, '*' ) << endl;
       
        //WIERSZE
        for( int y = 0; y < 20; y++ )
        {
            cout << "\t*";
            //POLA WIERSZA
            for( int x = 0; x < 20; x++ )
                 cout << static_cast < char >( sDodatkowa.PLANSZA[ y ][ x ] );
           
            cout << "*\n";
        }
       
        //DOL MAPY
        cout << "\t" << string( 22, '*' ) << "\n\n\n" << endl;
       
        cout << "\t\tLEGENDA\n"
        << "1 - SCIANA '|'\t2 - SCIANA '-'\n"
        << "3 - GRACZ '$'\t4 - META '@'\n"
        << "5 - TLO ' '\n"
        << "\tESC - WYJSCIE BEZ ZAPISU ZMIAN\tENTER - ZATWIERDZ ZMIANY\n"
        << "PORUSZASZ SIE WSKAZNIKIEM '#'\n"
        << "ZA POMOCA STRZALEK";
       
        break;
    }
    return true;
}

bool Labirynt::Ruch()
{
    int x1, y1; //ZMIENNE DO SPRAWDZENIA CZY POLE JEST PUSTE CZY PELNE
   
    //POBIERANIE ZNAKU Z KLAWIATURY
    int znak = getch();
   
    switch( TRYB )
    {
    case M_GAME: //GRA
        //WYBIERANIE ODPOWIEDNIEJ STRZALKI
        switch( znak )
        {
        case 224: //ZNAK SPECJALNY
            if( kbhit() ) //FUNKCJA SPRAWDZAJACA CZY JEST ZNAK SPECJALNY
            {
                znak = getch();
                switch( znak )
                {
                case 72: //STRZALKA W GORE
                   
                    x1 = sGracz.x;
                    y1 = sGracz.y - 1;
                   
                    //if( y1 < 0 ) { iLicznik++ ; break ; }   PRAWDOPODOBNIE NIEPOTRZEBNE
                    if( sPlansza.PLANSZA[ y1 ][ x1 ] == TLO )
                    {
                        sPlansza.PLANSZA[ sGracz.y ][ sGracz.x ] = TLO;
                        sPlansza.PLANSZA[ y1 ][ x1 ] = GRACZ;
                        sGracz.y = y1;
                        iLicznik++;
                    } else
                    if( sPlansza.PLANSZA[ y1 ][ x1 ] == META )
                    {
                        sPlansza.PLANSZA[ sGracz.y ][ sGracz.x ] = TLO;
                        sPlansza.PLANSZA[ y1 ][ x1 ] = GRACZ;
                        sGracz.y = y1;
                        iLicznik++;
                        TRYB = M_WIN;
                    } else iLicznik++;
                   
                    break;
                   
                case 80: //STRZALKA W DOL
                   
                    x1 = sGracz.x;
                    y1 = sGracz.y + 1;
                   
                    //if( y1 > 19 ) { iLicznik++ ; break ; }   PRAWDOPODOBNIE NIEPOTRZEBNE
                    if( sPlansza.PLANSZA[ y1 ][ x1 ] == TLO )
                    {
                        sPlansza.PLANSZA[ sGracz.y ][ sGracz.x ] = TLO;
                        sPlansza.PLANSZA[ y1 ][ x1 ] = GRACZ;
                        sGracz.y = y1;
                        iLicznik++;
                    } else
                    if( sPlansza.PLANSZA[ y1 ][ x1 ] == META )
                    {
                        sPlansza.PLANSZA[ sGracz.y ][ sGracz.x ] = TLO;
                        sPlansza.PLANSZA[ y1 ][ x1 ] = GRACZ;
                        sGracz.y = y1;
                        iLicznik++;
                        TRYB = M_WIN;
                    } else iLicznik++;
                   
                    break;
                   
                case 75: //STRZALKA W LEWO
                   
                    x1 = sGracz.x - 1;
                    y1 = sGracz.y;
                   
                    //if( x1 < 0 ) { iLicznik++ ; break ; }   PRAWDOPODOBNIE NIEPOTRZEBNE
                    if( sPlansza.PLANSZA[ y1 ][ x1 ] == TLO )
                    {
                        sPlansza.PLANSZA[ sGracz.y ][ sGracz.x ] = TLO;
                        sPlansza.PLANSZA[ y1 ][ x1 ] = GRACZ;
                        sGracz.x = x1;
                        iLicznik++;
                    } else
                    if( sPlansza.PLANSZA[ y1 ][ x1 ] == META )
                    {
                        sPlansza.PLANSZA[ sGracz.y ][ sGracz.x ] = TLO;
                        sPlansza.PLANSZA[ y1 ][ x1 ] = GRACZ;
                        sGracz.x = x1;
                        iLicznik++;
                        TRYB = M_WIN;
                    } else iLicznik++;
                   
                    break;
                   
                case 77: //STRZALKA W PRAWO
                   
                    x1 = sGracz.x + 1;
                    y1 = sGracz.y;
                   
                    //if( x1 > 19 ) { iLicznik++ ; break ; }   PRAWDOPODOBNIE NIEPOTRZEBNE
                    if( sPlansza.PLANSZA[ y1 ][ x1 ] == TLO )
                    {
                        sPlansza.PLANSZA[ sGracz.y ][ sGracz.x ] = TLO;
                        sPlansza.PLANSZA[ y1 ][ x1 ] = GRACZ;
                        sGracz.x = x1;
                        iLicznik++;
                    } else
                    if( sPlansza.PLANSZA[ y1 ][ x1 ] == META )
                    {
                        sPlansza.PLANSZA[ sGracz.y ][ sGracz.x ] = TLO;
                        sPlansza.PLANSZA[ y1 ][ x1 ] = GRACZ;
                        sGracz.x = x1;
                        iLicznik++;
                        TRYB = M_WIN;
                    } else iLicznik++;
                   
                    break;
                }
            }
            break;
           
        case 76: //duze L OSZUSTWO
           
            sPlansza.PLANSZA[ sMeta.y ][ sMeta.x ] = GRACZ;
            sPlansza.PLANSZA[ sGracz.y ][ sGracz.x ] = TLO;
            sGracz.x = sMeta.x;
            sGracz.y = sMeta.y;
            iLicznik++;
            TRYB = M_WIN;
            break;
        }
        break;
       
    case M_EDIT: //EDYCJA MAPY
        switch( znak )
        {
        case 224: //ZNAK SPECJALNY
            if( kbhit() ) //FUNKCJA SPRAWDZAJACA CZY JEST ZNAK SPECJALNY
            {
                znak = getch();
                switch( znak )
                {
                case 72: //STRZALKA W GORE
                   
                    x1 = sWskaznik.x;
                    y1 = sWskaznik.y - 1;
                   
                    if( y1 < 0 ) break; //JESLI WSKAZNIK WYJDZIE POZAPLANSZE
                   
                    for( int y = 0; y < 20; y++ )
                    for( int x = 0; x < 20; x++ )
                         sDodatkowa.PLANSZA[ y ][ x ] = sPlansza.PLANSZA[ y ][ x ]; //przekopiowanie planszy do pomocnej planszy
                   
                    sWskaznik.x = x1;
                    sWskaznik.y = y1;
                   
                    sDodatkowa.PLANSZA[ sWskaznik.y ][ sWskaznik.x ] = EDIT; //PRZYPISANIE WSKAZNIKA DO PLANSZY
                   
                    break;
                   
                case 80: //STRZALKA W DOL
                   
                    x1 = sWskaznik.x;
                    y1 = sWskaznik.y + 1;
                   
                    if( y1 > 19 ) break; //JESLI WSKAZNIK WYJDZIE POZAPLANSZE
                   
                    for( int y = 0; y < 20; y++ )
                    for( int x = 0; x < 20; x++ )
                         sDodatkowa.PLANSZA[ y ][ x ] = sPlansza.PLANSZA[ y ][ x ]; //przekopiowanie planszy do pomocnej planszy
                   
                    sWskaznik.x = x1;
                    sWskaznik.y = y1;
                   
                    sDodatkowa.PLANSZA[ sWskaznik.y ][ sWskaznik.x ] = EDIT; //PRZYPISANIE WSKAZNIKA DO PLANSZY
                   
                    break;
                   
                case 75: //STRZALKA W LEWO
                   
                    x1 = sWskaznik.x - 1;
                    y1 = sWskaznik.y;
                   
                    if( x1 < 0 ) break; //JESLI WSKAZNIK WYJDZIE POZAPLANSZE
                   
                    for( int y = 0; y < 20; y++ )
                    for( int x = 0; x < 20; x++ )
                         sDodatkowa.PLANSZA[ y ][ x ] = sPlansza.PLANSZA[ y ][ x ]; //przekopiowanie planszy do pomocnej planszy
                   
                    sWskaznik.x = x1;
                    sWskaznik.y = y1;
                   
                    sDodatkowa.PLANSZA[ sWskaznik.y ][ sWskaznik.x ] = EDIT; //PRZYPISANIE WSKAZNIKA DO PLANSZY
                   
                    break;
                   
                case 77: //STRZALKA W PRAWO
                   
                    x1 = sWskaznik.x + 1;
                    y1 = sWskaznik.y;
                   
                    if( x1 > 19 ) break; //JESLI WSKAZNIK WYJDZIE POZAPLANSZE
                   
                    for( int y = 0; y < 20; y++ )
                    for( int x = 0; x < 20; x++ )
                         sDodatkowa.PLANSZA[ y ][ x ] = sPlansza.PLANSZA[ y ][ x ]; //przekopiowanie planszy do pomocnej planszy
                   
                    sWskaznik.x = x1;
                    sWskaznik.y = y1;
                   
                    sDodatkowa.PLANSZA[ sWskaznik.y ][ sWskaznik.x ] = EDIT; //PRZYPISANIE WSKAZNIKA DO PLANSZY
                   
                    break;
                }
            }
            break;
           
            //WPROWADZENIE ZNAKU DO MAPY
           
        case 49: //CYFRA 1    
            //SCIANA1 = '|'
            sPlansza.PLANSZA[ sWskaznik.y ][ sWskaznik.x ] = SCIANA1;
            break;
           
        case 50: //CYFRA 2
            //SCIANA2 = '-'
            sPlansza.PLANSZA[ sWskaznik.y ][ sWskaznik.x ] = SCIANA2;
            break;
           
        case 51: //CYFRA 3
            //GRACZ   = '$'
            sPlansza.PLANSZA[ sWskaznik.y ][ sWskaznik.x ] = GRACZ;
            break;
           
        case 52: //CYFRA 4
            //META    = '@'
            sPlansza.PLANSZA[ sWskaznik.y ][ sWskaznik.x ] = META;
            break;
           
        case 53: //CYFRA 5
            //TLO     = ' '
            sPlansza.PLANSZA[ sWskaznik.y ][ sWskaznik.x ] = TLO;
            break;
           
        case 27: //ESC    WYJSCIE
            return false;
            break;
           
        case 13: //ENTER ZATWIERDZ MAPE
            TRYB = M_EXIT;
            break;
        }
        break;
    }
    return true;
}

bool Labirynt::NEW()
{
    TRYB = M_EDIT;
    system( "cls" );
   
    for( int y = 0; y < 20; y++ ) //WIERSZE
    for( int x = 0; x < 20; x++ ) //KOLUMNY
         sDodatkowa.PLANSZA[ y ][ x ] = TLO; //SZYSCIMY PLANSZE
   
    while( true )
    { //PETLA POZWALAJACA NA WYKONYWANIE ZMIAN
        while( TRYB == M_EDIT )
        {
            Narysuj();
            if( !Ruch() )
            {
                cout << "\n\nWYCHODZE BEZ ZAPISYWANIA ZMIAN";
                getch();
                return false;
            }
        }
        if( CHECKS() )
             break;
        else
        {
            cout << "\nPLANSZY NIE DA SIE UKONCZYC";
            getch();
            TRYB = M_EDIT;
        }
    } //WHILE(TRUE)
   
    system( "cls" );
    cout << "\n\n\n\tPODAJ NAZWE MAPY: ";
    cin >> sPlansza.cNazwaPlanszy;
   
    string napis = "MAPS\\";
    napis += sPlansza.cNazwaPlanszy;
    napis += ".adi";
   
    fstream zapis( napis.c_str(), ios::out | ios::binary );
   
    if( zapis )
    {
        zapis.write( reinterpret_cast < char *>( & sPlansza ), sizeof( sPlansza ) );
       
        cout << "\nPLANSZA ZAPISANA";
        getch();
    }
    return true;
}

bool Labirynt::EDITION()
{
    TRYB = M_EDIT;
    system( "cls" );
   
    int i_nrPlanszy;
    vector < string > VECs_Nazwa;
   
    if( Wypisz_pliki( VECs_Nazwa, i_nrPlanszy ) )
    {
        string wybor = "MAPS\\" + VECs_Nazwa[ i_nrPlanszy ];
       
        //OTWIERAMY PLIK DO PISANIA I CZYTANIA BINARNEGO
        fstream plik( wybor.c_str(), ios::in | ios::out | ios::binary );
       
        if( plik )
        {
            //POBIERAMY Z PLIKU DANE DO sPlansza
            plik.read( reinterpret_cast < char *>( & sPlansza ), sizeof( sPlansza ) );
           
            while( true )
            { //PETLA POZWALAJACA NA WYKONYWANIE ZMIAN
                while( TRYB == M_EDIT )
                {
                    Narysuj();
                    if( !Ruch() )
                    {
                        cout << "\n\nWYCHODZE BEZ ZAPISYWANIA ZMIAN";
                        getch();
                        return false;
                    }
                }
                if( CHECKS() )
                     break;
                else
                {
                    cout << "\nPLANSZY NIE DA SIE UKONCZYC";
                    getch();
                    TRYB = M_EDIT;
                }
            } //WHILE(TRUE)
           
            plik.seekp( 0, ios::beg ); //WSKAZNIK DO PISANIA , 2 ARGUMENT DOMNIEMANY = ios::beg
            plik.write( reinterpret_cast < char *>( & sPlansza ), sizeof( sPlansza ) );
        }
    }
   
    return true;
}

bool Labirynt::CHECKS()
{
    //PRZEKOPIOWANIE PLANSZY DO POMOCNEJ TABLICY
    for( int y = 0; y < 20; y++ )
    for( int x = 0; x < 20; x++ )
         sDodatkowa.PLANSZA[ y ][ x ] = sPlansza.PLANSZA[ y ][ x ];
   
    for(;; )
    {
        //SPRAWDZANIE CZY ZARAZ OBOK JEST META JESLI TAK ZWRACA TRUE
        if( sDodatkowa.PLANSZA[ sGracz.y - 1 ][ sGracz.x ] == META ||
        sDodatkowa.PLANSZA[ sGracz.y + 1 ][ sGracz.x ] == META ||
        sDodatkowa.PLANSZA[ sGracz.y ][ sGracz.x - 1 ] == META ||
        sDodatkowa.PLANSZA[ sGracz.y ][ sGracz.x + 1 ] == META )
             return true;
        else
        //SPRAWDZAMY CZY POLE == TLO
        //JESLI TAK TO PRZESUWAMY GRACZA NA TA POZYCJE A NA STAREJ WPROWADZAMY ZNAK CHECK
        if( sDodatkowa.PLANSZA[ sGracz.y - 1 ][ sGracz.x ] == TLO )
        {
            sDodatkowa.PLANSZA[ sGracz.y - 1 ][ sGracz.x ] = CHECK;
            sGracz.y = sGracz.y - 1;
        }
        else
        //SPRAWDZAMY CZY POLE == TLO
        //JESLI TAK TO PRZESUWAMY GRACZA NA TA POZYCJE A NA STAREJ WPROWADZAMY ZNAK CHECK
        if( sDodatkowa.PLANSZA[ sGracz.y + 1 ][ sGracz.x ] == TLO )
        {
            sDodatkowa.PLANSZA[ sGracz.y + 1 ][ sGracz.x ] = CHECK;
            sGracz.y = sGracz.y + 1;
        }
        else
        //SPRAWDZAMY CZY POLE == TLO
        //JESLI TAK TO PRZESUWAMY GRACZA NA TA POZYCJE A NA STAREJ WPROWADZAMY ZNAK CHECK
        if( sDodatkowa.PLANSZA[ sGracz.y ][ sGracz.x - 1 ] == TLO )
        {
            sDodatkowa.PLANSZA[ sGracz.y ][ sGracz.x - 1 ] = CHECK;
            sGracz.x = sGracz.x - 1;
        }
        else
        //SPRAWDZAMY CZY POLE == TLO
        //JESLI TAK TO PRZESUWAMY GRACZA NA TA POZYCJE A NA STAREJ WPROWADZAMY ZNAK CHECK
        if( sDodatkowa.PLANSZA[ sGracz.y ][ sGracz.x - 1 ] == TLO )
        {
            sDodatkowa.PLANSZA[ sGracz.y ][ sGracz.x + 1 ] = CHECK;
            sGracz.x = sGracz.x + 1;
        }
        else
        {
            //JESLI ZADNE POLE OBOK NIE ROWNA SIE TLO TO SZUKAMY POLA == CHECK GDZIE OBOK JEST POLE == TLO
            int y = 0, x;
            bool wyjscie = true;
           
            while( y < 20 && wyjscie == true )
            {
                x = 0;
                while( x < 20 )
                {
                    //JESLI POLE == CHECK SPRAWDZ CZY JAKIES OBOK ROWNA SIE TLO
                    if( sDodatkowa.PLANSZA[ y ][ x ] == CHECK )
                    if( sDodatkowa.PLANSZA[ y - 1 ][ x ] == TLO ||
                    sDodatkowa.PLANSZA[ y + 1 ][ x ] == TLO ||
                    sDodatkowa.PLANSZA[ y ][ x - 1 ] == TLO ||
                    sDodatkowa.PLANSZA[ y ][ x + 1 ] == TLO )
                    {
                        //JESLI PRAWDA TO PRZYPISZ NOWE DANE
                        sGracz.y = y;
                        sGracz.x = x;
                        wyjscie = false;
                        break;
                    }
                    x++;
                }
                y++;
            }
            //JESLI NIE MA TAKIEGO MIEJSCA FUNKCJA ZWRUCI FALSE
            if( wyjscie == true )
                 return false;
           
        }
    }
}

bool Wypisz_pliki( vector < string > & SPIS, int & wyb )
{
    DIR * pdir = NULL; //WSKAZNIK SCIEZKI
    struct dirent * ps_dirent = NULL; //readdir ZWRACA STRUKTURE dirent
   
    pdir = opendir( ".MAPS" ); //MAPS or .MAPS??
   
    if( pdir ) //JESLI UDALO SIE OTWOZYC SCIEZKE
    {
        while( ps_dirent = readdir( pdir ) ) //JESLI COS JEST TO CZYTAJ
        {
            //strstr PRZESZUKUJE 1 const char * I SZUKA W NIM 2 const char * ZWRACA const char * LUB NULL JESLI NIC NIE ZNAJDZIE
            if( !( strstr( ps_dirent->d_name, "adi" ) == NULL ) )
                 SPIS.push_back( ps_dirent->d_name ); //TUTAJ WYSKAKIWALY BLEDY ZLEGO TYPU
           
        }
       
        if( SPIS.empty() )
        {
            cout << "\n\n\n\tW PLIKU \"MAPS\" NIE MA MAP";
            getch();
            return false;
        }
       
        while( true )
        {
            system( "cls" );
           
            cout << "\n\n\tLISTA MAP:\n";
           
            for( int i = 0; i <( static_cast < int >( SPIS.size() ) ); i++ )
                 cout << "\n\t" << i + 1 << " " << SPIS[ i ];
           
            cout << "\nNUMER: ";
           
            if( zab_cin( wyb ) && wyb >= 0 && wyb <( static_cast < int >( SPIS.size() ) ) )
                 break;
           
            cout << "\nNIE MA TAKIEJ OPCJI.";
            getch();
        }
    } else
    {
        cout << "\nNIE UDALO SIE OTWOZYC SCIEZKI.";
        getch();
        return false;
    }
    closedir( pdir ); //ZAMYKAMY SCIEZKE
    return true;
}

void DELETE_MAP()
{
    system( "cls" );
   
    vector < string > VECs_Nazwy;
    int i_liczba;
    if( Wypisz_pliki( VECs_Nazwy, i_liczba ) )
    {
        string s_Wybrana = "MAPS\\" + VECs_Nazwy[ i_liczba ];
       
        remove( s_Wybrana.c_str() );
    }
}
P-105027
Monika90
» 2014-02-20 22:38:41
Definiując funkcje Wypisz_pliki i DELETE_MAP zapomniałeś napisać Labirynt:: przed ich nazwami.

P-105037
Haker123
Temat założony przez niniejszego użytkownika
» 2014-02-21 17:12:34
Kurcze , taki podstawowy błąd i ja go nie wyłapałem przez 5h ;/
Dzieki wielkie ;]

Wiem że nie powinno się w jednym temacie zadawać innych pytań ale te dotyczą tego samego kodu.

1.W funkcji CHECKS zastosowałem dużo zagnieżdżonych if else, tak można robić czy powinienem zrobić to inaczej??
2.Czy powinienem w którymś miejscu dodać jakieś zabezpieczenia przy kożystaniu z plików, albo jakieś są nie potrzebne i powinienem je wyrzucić??(chodzi mi o sytuacje jak np plik się nie otworzył , nie można zapisać do pliku)
P-105069
DejaVu
» 2014-02-21 18:07:03
Ad 1. Można.
Ad 2. Generalnie nie zajmujemy się analizowaniem czyjegoś kodu. Jeżeli kod działa poprawnie to nie masz nad czym dumać. Kod źródłowy nigdy nie osiąga stanu idealnego.
P-105071
Haker123
Temat założony przez niniejszego użytkownika
» 2014-02-22 17:01:47
Dzieki za pomoc ;]
Temat można zamknąć.
P-105113
« 1 »
  Strona 1 z 1