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

Problem z funkcją składową klasy.

Ostatnio zmodyfikowano 2013-03-08 20:05
Autor Wiadomość
kanam99
Temat założony przez niniejszego użytkownika
Problem z funkcją składową klasy.
» 2013-03-07 21:35:54
Witam. Mam sobie oto taki kod:

Plik ekran.h:

C/C++
#ifndef EKRAN_H
#define EKRAN_H
#include <string>
#include <iostream>
class ekran
{
public:
    ekran();
    void pokaz();
    ekran( std::string nazwa, int dlg, int szer, std::string znak );
    void czysc();
    virtual ~ekran();
protected:
private:
    int dlg;
    int szer;
    std::string znak;
    std::string nazwa;
};

#endif // EKRAN_H

Plik ekran.cpp:

C/C++
#include "ekran.h"
#include <string>
#include <iostream>

ekran::ekran( std::string nazwa, int dlg, int szer, std::string znak )
    : nazwa( nazwa )
    , dlg( dlg )
    , szer( szer )
    , znak( znak )
{
    std::cout << "Utworzono ekran " << nazwa << " o szerokosci " << szer << " i o dlugosci " << dlg << ". Ramka zostanie stworzona za pomoca znaku:" << znak << std::endl;
}

ekran::~ekran()
{
    //dtor
}

ekran::ekran()
{
    std::cout << "Stworzono ekran bez zadnych wartosci";
}

void ekran::pokaz()
{
    std::cout << "/n/n" << std::endl;
    std::string ramka = znak;
    std::string brzeg = znak;
    int ile = 0; //petle ogolne
    int ile2 = 0; //petle zagniezdzone
   
    //Gorny brzeg
    do
    {
        std::cout << ramka;
        ile++;
    } while( ile != dlg );
   
    ile = 0;
    ile2 = 0;
   
    //Boki
    do
    {
        std::cout << znak;
        do
        {
            std::cout << " " << std::endl;
            ile2++;
        } while( ile2 != dlg - 2 );
       
        ile++;
    } while( ile != szer );
   
}

Gdy próbuję wywołać funkcję
pokaz()
 na rzecz już utworzonego obiektu klasy ekran ( np.
marian.pokaz()
 ) który został utworzony tak:
ekran marian( "marek", 5, 2, "#" );
 program nic nie pokazuje. Jeśli usunę wywołanie funkcji, wszytko działa dobrze. Podejrzewam, że to problem z pętlami, tylko nie wiem w którym miejscu. Pomożecie?
P-77887
Admixior
» 2013-03-08 16:13:28
C/C++
do
{
    std::cout << " " << std::endl;
    ile2++;
} while( ile2 != dlg - 2 );

w skrócie sam się wkopałeś.
dlg
 zawiera liczbę 2 jak od niej odejmiesz 2 to wyjdzie 0. A ile2 zaczyna odliczanie od 1 (wcześniej plusujesz)
Zastosuj tutaj najlepiej pętlę for (tutaj jak iw innych przypadkach) i wtedy nie będzie tego typu problemów, bo sprawdzanie będzie na początku a inkrementacja na końcu tuż przed sprawdzaniem;
P-77929
kanam99
Temat założony przez niniejszego użytkownika
» 2013-03-08 20:05:39
Dziękuję Ci bardzo. Zamykam :)
P-77943
« 1 »
  Strona 1 z 1