• 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

Cloud VPS
0 głosów
86 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ź 620 wizyt
0 głosów
2 odpowiedzi 462 wizyt
0 głosów
1 odpowiedź 1,258 wizyt
pytanie zadane 26 sierpnia 2015 w C i C++ przez Jakub Nowacki Początkujący (470 p.)

93,483 zapytań

142,417 odpowiedzi

322,763 komentarzy

62,895 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

Kursy INF.02 i INF.03
...