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

question-closed Vector zatrzymuje działanie programu | QT Creator

Object Storage Arubacloud
0 głosów
62 wizyt
pytanie zadane 18 stycznia 2020 w C i C++ przez Kaper99 Użytkownik (660 p.)
zamknięte 18 stycznia 2020 przez Kaper99

Witam,
mam problem z wektorem. Program wysypuje mi sie wtedy, gdy próbuje wykonać operacje na obiekcie umieszczonym w wektorze (np.próba wyświetlenia nazwy obiektu kończy się wyłączeniem programu, ale sprawdzenie czy wektor jest pusty nie powoduje problemów. W kodzie opisałem dokładniej gdzie znajduje się problem .Wklejam kod  

MainWindow.h

ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <vector>
#include "produkt.h"
#include "dodawanie_nowego_produktu.h"
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    void pokaz_wektor(vector <Produkt> wektor);
private slots:
    void on_dodaj_produkt_clicked();
private:
    Ui::MainWindow *ui;
    vector <Produkt> wektor_produktow;
     Produkt temp_produkt;
     Dodawanie_nowego_produktu okno_dodawania;
};

Dodawanie_nowego_produktu.h
 

#ifndef DODAWANIE_NOWEGO_PRODUKTU_H
#define DODAWANIE_NOWEGO_PRODUKTU_H
#include "produkt.h"

#include <QDialog>

namespace Ui {
class Dodawanie_nowego_produktu;
}

class Dodawanie_nowego_produktu : public QDialog, public Produkt
{
    Q_OBJECT

public:
    explicit Dodawanie_nowego_produktu(QWidget *parent = nullptr);
    ~Dodawanie_nowego_produktu();
    Produkt wczytaj_nowy_produkt() ;
    void dodaj_do_listy(QString text);
private slots:
    void on_zakoncz_clicked();

private:
    Ui::Dodawanie_nowego_produktu *ui;
    QString temp_nazwa_produktu;
        Produkt nowy_produkt;
        double temp_wartosc_kcal, temp_ilosc_sztuk, temp_cena;
};

Produkt.h

#ifndef PRODUKT_H
#define PRODUKT_H
#include <QString>
using namespace std;

class Produkt
{
private:
    QString nazwa;
    double ilosc_sztuk, cena, wartosc_kcal;

public:
    Produkt();

    //settery
    void setNazwa(QString text);
    void setCena(double cen);
    void setIlosc_sztuk(double ilosc);
    void setWartosc_kcal(double wartosc);
    //gettery
    QString getNazwa();

};

#endif

Ciała klas

MainWindow.cpp
 

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "dodawanie_produktu.h"
#include "dodawanie_nowego_produktu.h"
#include <QDebug>
#include <vector>
using namespace std;

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}
//Funkcja pokaz_vector nie jest nigdzie wykorzystywana
void MainWindow::pokaz_wektor(vector <Produkt> wektor)
{
    for (int i=0;i<wektor.size();i++)
    {
    qDebug()<<wektor[i].getNazwa();
    }
}
void MainWindow::on_dodaj_produkt_clicked()
{
    //W funkcji wczytaj_nowy_produkt otwieram nowe okno klasy 
    //Dodawanie_nowego_produktu i tam pobieram dane
     temp_produkt =okno_dodawania.wczytaj_nowy_produkt() ;
    //dodaje zwrócony obiekt do wektora
     wektor_produktow.push_back(temp_produkt);
    //sprawdzam czy obiekt dodał sie do wektora
     //testowałem, obiekt dodaje się
        if(wektor_produktow.empty()==true)
        {
            qDebug()<<"Pusty";
         }
        else
        {
            qDebug()<<"Niepusty";
            //Program dochodzi tutaj wypisuje mi w konsoli "Niepusty"
            //i kończy niezapowiedzianie się kończy bez oznajmienia jakiegokolwiek błędu
            qDebug()<<wektor_produktow[0].getNazwa();//tak nie działa
            // qDebug()<<temp_produkt.getNazwa();//działa bez problemu (Oczywiście po //wcześniejszym usunięciu linijki z wypisywaniem wektora)
        }

}

Dodawanie_nowego_produktu.cpp

#include "dodawanie_nowego_produktu.h"
#include "ui_dodawanie_nowego_produktu.h"
#include <QDebug>

Dodawanie_nowego_produktu::Dodawanie_nowego_produktu(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dodawanie_nowego_produktu)
{
    ui->setupUi(this);
}

Dodawanie_nowego_produktu::~Dodawanie_nowego_produktu()
{
    delete ui;
}

Produkt Dodawanie_nowego_produktu :: wczytaj_nowy_produkt()
{
  //tutaj wszystko działa poprawnie, obiekt jest zwracany 
    this->exec();
   temp_nazwa_produktu= ui->nazwa_produktu->text();
   temp_cena = ui->cena_za_sztuke->text().toDouble();
   temp_wartosc_kcal = ui->wartosc_kcal->text().toDouble();
   temp_ilosc_sztuk = ui->ilosc_sztuk->text().toDouble();

   nowy_produkt.setNazwa(temp_nazwa_produktu);
   nowy_produkt.setCena(temp_cena);
   nowy_produkt.setIlosc_sztuk(temp_ilosc_sztuk);
   nowy_produkt.setWartosc_kcal(temp_wartosc_kcal);


   return nowy_produkt;
}
//funkcja nieużywana 
 void Dodawanie_nowego_produktu:: dodaj_do_listy(QString text)
 {
     ui->lista->addItem(text);
 }
//funkcja zamykająca okno klasy  Dodawanie_nowego_produktu
void Dodawanie_nowego_produktu::on_zakoncz_clicked()
{

   this->close();
}

Produkt.cpp
 

#include "produkt.h"

Produkt::Produkt()
{

}
void Produkt::setNazwa(QString text)
{
    nazwa= text;
}

void Produkt ::setCena(double cen)
{
    cena=cen;
}
void Produkt::setIlosc_sztuk(double ilosc)
{
    ilosc_sztuk=ilosc;
}
void Produkt::setWartosc_kcal(double wartosc)
{
    wartosc_kcal=wartosc;
}
 QString Produkt::getNazwa()
 {
     return nazwa;
 }

 

komentarz zamknięcia: Problem z kompilatorem, reinstalacja pomogła

Podobne pytania

+1 głos
1 odpowiedź 363 wizyt
0 głosów
2 odpowiedzi 368 wizyt
0 głosów
1 odpowiedź 1,038 wizyt
pytanie zadane 26 sierpnia 2015 w C i C++ przez Jakub Nowacki Początkujący (470 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 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!

...