• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Dlaczego te metody wywołują błąd ?

Object Storage Arubacloud
0 głosów
960 wizyt
pytanie zadane 6 czerwca 2017 w C i C++ przez konrad99 Gaduła (4,090 p.)
edycja 6 czerwca 2017 przez konrad99
void Kolo_ratunkowe::pol_na_pol(Pytanie & pyt)
{ if(d3==true)
{d3=false;
    int losowa1=0;
    for (int i=0;i<2;++i)
    {


    int losowe=(( std::rand() % 4) + 1 );
    while(losowe==pyt.get_poprawna()||losowe==losowa1)
        {
           losowe=(( std::rand() % 4) + 1 );
        }

        switch(losowe)
        {
        case 1:
            pyt.odpowiedza1="";//tak dziala gdy odpowiedza1 jest publiczna
            //pyt.set_odpowiedz_a("");//tak program przestaje dzialac
            break;
        case 2:
            pyt.odpowiedzb1="";//dziala gdy odpowiedzb1 publiczna
          //  pyt.set_odpowiedz_b("");//program przestaje dzialac
            break;
        case 3:
            pyt.set_odpowiedz_c("");//a to odziwu dziala
            break;
        case 4:
            pyt.set_odpowiedz_d("");//to tez
            break;


        }
 losowa1=losowe;


    }}
    else{}

}

//A tu plik pytanie.h
#ifndef PYTANIE_H
#define PYTANIE_H
#include <iostream>
#include <String>
#include <fstream>

class Pytanie
{
    public:
        Pytanie(std::string tresc_pyt,std::string,std::string,std::string,std::string,int);
        Pytanie();
        std::string get_tresc_pytania();
        std::string get_odpowiedz_a();
        std::string get_odpowiedz_b();
        std::string get_odpowiedz_c();
        std::string get_odpowiedz_d();
        void zablokuj_kolo(int nr);

        std::string set_odpowiedz_a(std::string );
        std::string set_odpowiedz_b(std::string);
        std::string set_odpowiedz_c(std::string);
        std::string set_odpowiedz_d(std::string);
        bool sprawdz_poprawnosc_odpowiedzi(short);
        bool wczytaj_pytanie(std::string,int ,int,int,int,int);
        short get_poprawna();

        virtual ~Pytanie();

    protected:

    private:

        std::string tresc_pytania;
        public:
        std::string odpowiedza1;
        std::string odpowiedzb1;
        private:
       std::string odpowiedzc,odpowiedzd;
        short numer_poprawnej;

};

#endif // PYTANIE_H

Pytanie cpp

#include "Pytanie.h"
#include <fstream>

Pytanie::Pytanie(std::string tresc_pyt, std::string odpa,std::string odpb,std::string odpc,std::string odpd,int poprawna)

{
    tresc_pytania=tresc_pyt;
    odpowiedza1=odpa;
    odpowiedzb1=odpb;
    odpowiedzc=odpc;

    odpowiedzd=odpd;
    numer_poprawnej=poprawna;
}
Pytanie::Pytanie()
{

}

        std::string Pytanie::set_odpowiedz_a(std::string x)
        {
           
             odpowiedza1=x;//to wywoluje blad w trakcie dzialania programu


        }

        std::string Pytanie::set_odpowiedz_b(std::string x)
        {
            odpowiedzb1=x;//to tez

        }

        std::string Pytanie::set_odpowiedz_c(std::string x)
        {
            odpowiedzc=x;//to dziala

        }

        std::string Pytanie::set_odpowiedz_d(std::string x)
        {
            odpowiedzd=x;//dziala
        }


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

std::string Pytanie::get_tresc_pytania()
{
    return tresc_pytania;
}
        std::string Pytanie::get_odpowiedz_a()
        {
            return odpowiedza1;
        }
        std::string Pytanie::get_odpowiedz_b()
        {
            return odpowiedzb1;
        }
        std::string Pytanie::get_odpowiedz_c()
        {
            return odpowiedzc;
        }
        std::string Pytanie::get_odpowiedz_d()
        {
            return odpowiedzd;
        }
        short Pytanie::get_poprawna()
        {
            return numer_poprawnej;
        }
         bool Pytanie::sprawdz_poprawnosc_odpowiedzi(short odp)
         {
             return odp==numer_poprawnej;
         }
         bool Pytanie::wczytaj_pytanie(std::string tr,int a,int b,int c,int d,int pop)
         {
tresc_pytania=tr;
odpowiedza1=a;
odpowiedzb1=b;
odpowiedzc=c;
odpowiedzd=d;
numer_poprawnej=pop;

    return true;
         }
Czemu metody std::string set_odpowiedz_a(std::string );
        std::string set_odpowiedz_b(std::string);

wywoluja blad a set_c i set_d dzialaja poprawnie ?
komentarz 6 czerwca 2017 przez Wiciorny Ekspert (270,170 p.)
przeniesione 6 czerwca 2017 przez draghan
Opakuj drugi kod czytelniej najpierw i wstaw odpowiednie pole "języka programowania"
komentarz 6 czerwca 2017 przez draghan VIP (106,230 p.)
...i napisz, co to za błąd. :)
komentarz 6 czerwca 2017 przez konrad99 Gaduła (4,090 p.)
Po prostu program przestaje dzialac z tym ze blad wystepuje gdy odnosze sie przez funkcje skladowa a gdy globalnie to bledu nigdy nie ma

1 odpowiedź

0 głosów
odpowiedź 6 czerwca 2017 przez j23 Mędrzec (194,920 p.)
wybrane 6 czerwca 2017 przez konrad99
 
Najlepsza

Formatowanie koszmarne!

Pokaż, jak wywołujesz Kolo_ratunkowe::pol_na_pol, bo w kodzie, który podałeś, nie widać błędów (no może poza tym, że poniższe funkcje powinny zwracać jakąś konkretną wartość przez return).

 

std::string Pytanie::set_odpowiedz_a(std::string x)
std::string Pytanie::set_odpowiedz_b(std::string x)
std::string Pytanie::set_odpowiedz_c(std::string x)
std::string Pytanie::set_odpowiedz_d(std::string x)

Lepiej będzie tak:

std::string Pytanie::set_odpowiedz_a(const std::string &x)
std::string Pytanie::set_odpowiedz_b(const std::string &x)
std::string Pytanie::set_odpowiedz_c(const std::string &x)
std::string Pytanie::set_odpowiedz_d(const std::string &x)

 

komentarz 6 czerwca 2017 przez konrad99 Gaduła (4,090 p.)
kola.pol_na_pol(pytania_milionerzy[i]);//pytania_milionerzy[i] to vector obiektow pytanie

 

komentarz 6 czerwca 2017 przez konrad99 Gaduła (4,090 p.)
Dziala po przekazywaniu przez stala referencje zadzialalo
komentarz 6 czerwca 2017 przez j23 Mędrzec (194,920 p.)

Oj, coś mi się wydaje, że błąd cały czas jest. Brak referencji w argumencie funkcji to nie jest błąd, żeby jej dodanie coś naprawiło.

Pokaż szerszy kontekst wywołania pol_na_pol, bo jedna linia kodu niewiele mówi. Obstawiam, że przekraczasz zakres tablicy pytania_milionerzy.

 

komentarz 6 czerwca 2017 przez konrad99 Gaduła (4,090 p.)
#include "GRA.h"
#include <windows.h>
#include <fstream>
#include <iostream>
#include <sstream>
GRA::GRA()
{



kasa.push_back(500);
kasa.push_back(1000);
kasa.push_back(2000);
kasa.push_back(5000);
kasa.push_back(10000);
kasa.push_back(20000);
kasa.push_back(40000);
kasa.push_back(75000);
kasa.push_back(125000);
kasa.push_back(250000);
kasa.push_back(500000);
kasa.push_back(1000000);
std::fstream plik;
plik.open( "nazwa_pliku.txt", std::ios::in | std::ios::out );
if( plik.good() == true )
{

    //tu operacje na pliku
} else {std::cout << "Dostep do pliku zostal zabroniony!" << std::endl;}

for(int i=0;i<2;++i) //i<12
{
std::string trv;
std::string v1,v2,v3,v4,m;

int vp;
getline(plik, trv);
getline(plik, v1);
getline(plik, v2);
getline(plik, v3);
getline(plik, v4);
getline(plik, m);


std::istringstream iss(m);
iss >> vp;
//plik>>vp;
//std::cout<<v2<<v3<<v4<<vp;

    Pytanie txt(trv,v1,v2,v3,v4,vp);
//txt.wczytaj_pytanie(trv,v1,v2,v3,v4,vp);
    pytania_milionerzy.push_back(txt);
}
}

GRA::~GRA()
{
    //dtor
}
 void GRA::zacznij_gre()
 {
     std::cout<<"Witaj w Milionerach "<<std::endl;
     bool czy_gra_dalej=true;
     for(int i=0;i<2&&czy_gra_dalej==true;++i)//i<12
     { int nr_odp;
      do{
         std::cout<<"Grasz o "<<kasa[i]<<" zl"<<std::endl;
         std::cout<<pytania_milionerzy[i].get_tresc_pytania()<<" "<<std::endl;
         std::cout<<"1 "<<pytania_milionerzy[i].get_odpowiedz_a()<<" "<<std::endl;
         std::cout<<"2 "<<pytania_milionerzy[i].get_odpowiedz_b()<<" "<<std::endl;
         std::cout<<"3 "<<pytania_milionerzy[i].get_odpowiedz_c()<<" "<<std::endl;
         std::cout<<"4 "<<pytania_milionerzy[i].get_odpowiedz_d()<<" "<<std::endl;
         std::cout<<"5 "<<"Telefon do przyjaciela "<<kola.czy_wolne(1)<<std::endl;
           std::cout<<"6 "<<"Publicznosc "<<kola.czy_wolne(2)<<std::endl;
             std::cout<<"7 "<<"50 na 50 "<<kola.czy_wolne(3)<<std::endl;
         std::cout<<"Podaj odpowiedz "<<std::endl;
         std::cin>>nr_odp;
         if(nr_odp==5)
         {
             kola.telefon_do_przyjaciela(pytania_milionerzy[i]);
             Sleep(7000);
         }
         else if(nr_odp==6)
         {
           kola.publicznosc(pytania_milionerzy[i]);
           Sleep(7000);
         }
         else if(nr_odp==7)
         {
            // pytania_milionerzy[i].set_odpowiedz_a("");
        // pytania_milionerzy[i].set_odpowiedz_b("");
           kola.pol_na_pol(pytania_milionerzy[i]);
         }
     }while(nr_odp>4);

     if(pytania_milionerzy[i].sprawdz_poprawnosc_odpowiedzi(nr_odp))
     {
       std::cout<<"Grasz dalej "<<std::endl;
     }
     else
     {
         std::cout<<"Porazka "<<std::endl;
         czy_gra_dalej=false;
         Sleep(5000);
     }

     }
     if(czy_gra_dalej==true)
     {
         std::cout<<"Gratuluje Milionerze";
     }

 }

Nie przekraczam bo dane sa z tym ze jak w metodzie probowalem zmienic skladowe string program po dojsciu do tego elmentu przestawal dzialac teraz wszystko dziala faktycznie to dziwne

komentarz 6 czerwca 2017 przez j23 Mędrzec (194,920 p.)

A to "przestaje działać" co dokładnie oznacza? Pokazuje się jakiś błąd, czy się zawiesza?

Błędu w kodzie nie widzę. Dodałeś brakujące returny?

 

komentarz 6 czerwca 2017 przez konrad99 Gaduła (4,090 p.)
Zrobilem voidy tak po prostu sie zawiesza sorry za brak polskich znakow ale jestem na pc tylko z jezykiem angielskim z tym ze od czasu dodania voida i stalej referencji wszystko dziala.
komentarz 7 czerwca 2017 przez j23 Mędrzec (194,920 p.)
Jakim kompilatorem to kompilujesz?

Podobne pytania

0 głosów
2 odpowiedzi 139 wizyt
pytanie zadane 9 listopada 2016 w C i C++ przez gierasinskiw Użytkownik (510 p.)
0 głosów
1 odpowiedź 215 wizyt
pytanie zadane 2 września 2015 w Java przez uczeń1998 Obywatel (1,930 p.)
0 głosów
1 odpowiedź 321 wizyt
pytanie zadane 6 lipca 2020 w OpenGL, Unity przez tonn204 Mądrala (7,440 p.)

92,576 zapytań

141,426 odpowiedzi

319,651 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...