Wektor i konstruktory/destruktory przy dziedziczeniu

0

Witam,

piszę pewien program na zaliczenie jednak mam problem z wektorem, prawdopodobnie spowodowane to jest dziedziczeniem jednak nie wiem w którym miejscu, usunięcie destruktorów z klas które są dziedziczone usuwa problem. Kod niestety jest dość długi, sposób dziedziczenia też zagmatwany, no ale niestety takie jest ode mnie wymagane.

 #include <cstdlib>
#include <iostream>
#include <fstream>
#include <conio.h>
#include <iomanip>
#include <vector>
#include <algorithm>

using namespace std;

//Klasa rodzaji opakowan ze swoimi skladowymi
class rodzajeOpakowan{
     protected: 
          string rodzajOpakowania;
      
     public:
          rodzajeOpakowan();
          void ustawRodzajOpakowania(string nazwa){ rodzajOpakowania=nazwa; };
          string pobierzRodzajOpakowania(){ return rodzajOpakowania; };
};
rodzajeOpakowan::rodzajeOpakowan(){
     rodzajOpakowania="brak danych";
}

//Klasa opakowanie ze swoimi skladowymi
class opakowanie : public rodzajeOpakowan{
     protected:
          int dlugosc, szerokosc, wysokosc;   //dane w milimetrach
          
     public:
          opakowanie();
          void ustawDlugosc(int wartosc){ dlugosc=wartosc; };
          void ustawSzerokosc(int wartosc){ szerokosc=wartosc; };
          void ustawWysokosc(int wartosc){ wysokosc=wartosc; };
          int pobierzDlugosc(){ return dlugosc; };
          int pobierzSzerokosc(){ return szerokosc; };
          int pobierzWysokosc(){ return wysokosc; };
};
opakowanie::opakowanie():rodzajeOpakowan(){
     dlugosc = szerokosc = wysokosc = 0;
}

//Klasa rodzaj leku ze swoimi skladowymi
class rodzajLeku{
     protected:
          string typLeku;
     
     public:
          rodzajLeku();
          void ustawRodzajLeku(string nazwa){ typLeku = nazwa; };
          string pobierzRodzajLeku(){ return typLeku; };
};
rodzajLeku::rodzajLeku(){
     typLeku="brak danych";
}

//Klasa producent ze skladowymi
class producent{
     protected:
          string nazwaProducenta;
          class daneAdresoweProducenta;
          daneAdresoweProducenta *wskNaAdresProducenta;
     
     public:
          producent();
          ~producent();
          void ustawNazweProducenta(string wartosc){ nazwaProducenta=wartosc; };
          void ustawAdresProducenta(string wartosc);
          string pobierzNazweProducenta(){ return nazwaProducenta; };
          string pobierzAdresProducenta();
};
     //klasa zagniezdzona klasy producent ze skladowymi
class producent::daneAdresoweProducenta{
     friend class producent;
     friend class pochodzenieLeku;
     friend class lek;
     friend class przedmiotyNaStanie;
     friend class przedmiotyDoZamowienia;
     protected:
          string adresProducenta;
     public:
           daneAdresoweProducenta();
           void ustawAdresProducenta(int wartosc){ this->adresProducenta=wartosc; };
           string pobierzAdresProducenta(){ this->adresProducenta; };
};
producent::daneAdresoweProducenta::daneAdresoweProducenta(){
     adresProducenta="brak danych";
}

//ciag dalszy skladowych klasy producent
producent::producent(){
     nazwaProducenta="brak danych";
     wskNaAdresProducenta=new daneAdresoweProducenta;
}
producent::~producent(){
     delete wskNaAdresProducenta;
}
void producent::ustawAdresProducenta(string wartosc){
     wskNaAdresProducenta->adresProducenta=wartosc;
}
string producent::pobierzAdresProducenta(){
     return wskNaAdresProducenta->adresProducenta;
}

//Klasa hurtownia ze skladowymi
class hurtownia{
     protected:
          string nazwaHurtowni;
          class daneAdresoweHurtowni;
          daneAdresoweHurtowni *wskNaAdresHurtowni;
     
     public:
          hurtownia();
          ~hurtownia();
          void ustawNazweHurtowni(string wartosc){ nazwaHurtowni=wartosc; };
          void ustawAdresHurtowni(string wartosc);
          string pobierzNazweHurtowni(){ return nazwaHurtowni; };
          string pobierzAdresHurtowni();
};
     //klasa zagniezdzona klasy hurtownia ze skladowymi
class hurtownia::daneAdresoweHurtowni{
     friend class hurtownia;
     friend class pochodzenieLeku;
     friend class lek;
     friend class przedmiotyNaStanie;
     friend class przedmiotyDoZamowienia;
     protected:
          string adresHurtowni;
     public:
           daneAdresoweHurtowni();
           void ustawAdresHurtowni(int wartosc){ this->adresHurtowni=wartosc; };
           string pobierzAdresHurtowni(){ this->adresHurtowni; };
};
hurtownia::daneAdresoweHurtowni::daneAdresoweHurtowni(){
     adresHurtowni="brak danych";
}

//ciag dalszy skladowych klasy hurtownia
hurtownia::hurtownia(){
     nazwaHurtowni="brak danych";
     wskNaAdresHurtowni=new daneAdresoweHurtowni;
}
hurtownia::~hurtownia(){
     delete wskNaAdresHurtowni;
}

void hurtownia::ustawAdresHurtowni(string wartosc){
     wskNaAdresHurtowni->adresHurtowni=wartosc;
}
string hurtownia::pobierzAdresHurtowni(){
     return wskNaAdresHurtowni->adresHurtowni;
}

class pochodzenieLeku : public producent, public hurtownia{
     protected:
          
     public:
          pochodzenieLeku();
};
pochodzenieLeku::pochodzenieLeku():producent(),hurtownia(){
     nazwaProducenta=wskNaAdresProducenta->adresProducenta=nazwaHurtowni=wskNaAdresHurtowni->adresHurtowni="brak danych";
}

//Klasa lek wraz ze swoimi skladowymi
class lek : public opakowanie, public rodzajLeku, public pochodzenieLeku{
     protected:
          int dataWaznosci;
          bool recepta;
     public:
          lek();
          void ustawDateWaznosci(int wartosc){ dataWaznosci=wartosc; };
          void ustawRecepte(bool wartosc){ recepta=wartosc; };
          virtual void wyswietl(){};
          int pobierzDateWaznosci(){ return dataWaznosci; };
          bool pobierzRecepte(){ return recepta; };
};
lek::lek():opakowanie(), rodzajLeku(), pochodzenieLeku(){
     dataWaznosci=0;
     recepta=0;
}

//Klasa przedmioty na stanie wraz ze swoimi skladowymi
class przedmiotyNaStanie : public lek{
     //friend void ustawPromocje(przedmiotyNaStanie *wskPrzedmiotowNaStanie, int iloscPrzedmiotowNaStanie);
     
     protected:
          int idLeku;
          int idPolki;
          int iloscNaPolce;
          float cena;
          bool czyWPromocji;
          
          //const int szansaNaPromocje;
          static const int iloscPromocji();
          
     public:
          przedmiotyNaStanie();
          przedmiotyNaStanie(int idLeku, int idPolki=0, int iloscNaPolce=0, float cena=0, bool czyWPromocji=0, string rodzajOpakowania="brak danych", int dlugosc=0, int szerokosc=0, int wysokosc=0, string typLeku="brak danych", string nazwaProducenta="brak danych", string adresProducenta="brak danych", string nazwaHurtowni="brak danych", string adresHurtowni="brak danych", int dataWaznosci=0, bool recepta=0);
          void ustawIdPolki(int wartosc){ idPolki=wartosc; };
          void ustawIloscNaPolce(int wartosc){ iloscNaPolce=wartosc; };
          void ustawCene(float wartosc){ cena=wartosc; };
          void wyswietl();
          int pobierzIdLeku(){ return idLeku; };
          int pobierzIdPolki(){ return idPolki; };
          int pobierzIloscNaPolce(){ return iloscNaPolce; };
          float pobierzCene(){ return cena; };
          bool pobierzPromocje(){ return czyWPromocji; };
          
          //dodac przeciazanie operatorow!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
};
przedmiotyNaStanie::przedmiotyNaStanie():lek()/*:szansaNaPromocje(15)*/{
     idLeku=idPolki=iloscNaPolce=0;
     cena=0;
     czyWPromocji=0;
}
przedmiotyNaStanie::przedmiotyNaStanie(int idLeku, int idPolki, int iloscNaPolce, float cena, bool czyWPromocji, string rodzajOpakowania, int dlugosc, int szerokosc, int wysokosc, string typLeku, string nazwaProducenta, string adresProducenta, string nazwaHurtowni, string adresHurtowni, int dataWaznosci, bool recepta):lek()/*:szansaNaPromocje(15)*/{
     this->idLeku=idLeku;
     this->idPolki=idPolki;
     this->iloscNaPolce=iloscNaPolce;
     this->cena=cena;
     this->czyWPromocji=czyWPromocji;
     this->rodzajOpakowania=rodzajOpakowania;
     this->dlugosc=dlugosc;
     this->szerokosc=szerokosc;
     this->wysokosc=wysokosc;
     this->typLeku=typLeku;
     this->nazwaProducenta=nazwaProducenta;
     wskNaAdresProducenta->adresProducenta=adresProducenta;
     this->nazwaHurtowni=nazwaHurtowni;
     wskNaAdresHurtowni->adresHurtowni=adresHurtowni;
     this->dataWaznosci=dataWaznosci;
     this->recepta=recepta;
}
void przedmiotyNaStanie::wyswietl(){
     cout << "sposob wyswietlania" << endl;
}

//Klasa przedmiotyDoZamowienia wraz ze swoimi skladowymi
class przedmiotyDoZamowienia : public lek{
     protected:
          int iloscDoZamowienia;
          float maksCena;
     public:
          przedmiotyDoZamowienia();
          przedmiotyDoZamowienia(int wartosc);
          void ustawIloscDoZamowienia(int wartosc){ iloscDoZamowienia=wartosc; };
          void ustawMaksCene(float wartosc){ maksCena=wartosc; };
          void wyswietl();
          int pobierzIloscDoZamowienia(){ return iloscDoZamowienia; };
          float pobierzMaksCene(){ return maksCena; };
};
przedmiotyDoZamowienia::przedmiotyDoZamowienia(){
}
przedmiotyDoZamowienia::przedmiotyDoZamowienia(int wartosc){
     iloscDoZamowienia=wartosc;
}
void przedmiotyDoZamowienia::wyswietl(){
     cout << "sposob wyswietlania" << endl;
}


void wypelnijWektorDanymiZBazy(vector<przedmiotyNaStanie> &wektorPosiadanychLekow){
     int idLeku=0;
     int idPolki=0;
     int iloscNaPolce=0;
     float cena=0;
     bool czyWPromocji=0;
     string rodzajOpakowania="";
     int dlugosc=0;
     int szerokosc=0;
     int wysokosc=0;
     string typLeku="cos";
     string nazwaProducenta="cosik";
     string adresProducenta="abc";
     string nazwaHurtowni="ads";
     string adresHurtowni="123";
     int dataWaznosci=0;
     bool recepta=0;
     //wektorPosiadanychLekow.push_back(przedmiotyNaStanie(idLeku, idPolki, iloscNaPolce, cena, czyWPromocji, rodzajOpakowania, dlugosc, szerokosc, wysokosc, typLeku, nazwaProducenta, adresProducenta, nazwaHurtowni, adresHurtowni, dataWaznosci, recepta));
}

class testowK : public pochodzenieLeku, public rodzajLeku{
     int obiekt;
};

int main(int argc, char *argv[])
{
    
    vector<przedmiotyNaStanie> wektorPosiadanychLekow;
    wektorPosiadanychLekow.push_back(przedmiotyNaStanie());
    //wypelnijWektorDanymiZBazy(wektorPosiadanychLekow);
    
    cout << wektorPosiadanychLekow[0].pobierzRodzajLeku() << endl;
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
0

dodałem kilka coutow które pokazują wywołania destruktorów widać, że próbuje je wywołać przed i po zakończeniu, stąd błąd

#include <cstdlib>
#include <iostream>
#include <fstream>
#include <conio.h>
#include <iomanip>
#include <vector>
#include <algorithm>

using namespace std;

//Klasa rodzaji opakowan ze swoimi skladowymi
class rodzajeOpakowan{
     protected: 
          string rodzajOpakowania;
      
     public:
          rodzajeOpakowan();
          void ustawRodzajOpakowania(string nazwa){ rodzajOpakowania=nazwa; };
          string pobierzRodzajOpakowania(){ return rodzajOpakowania; };
};
rodzajeOpakowan::rodzajeOpakowan(){
                                   cout << "rodzaj opakowan" << endl;
     rodzajOpakowania="brak danych";
}

//Klasa opakowanie ze swoimi skladowymi
class opakowanie : public rodzajeOpakowan{
     protected:
          int dlugosc, szerokosc, wysokosc;   //dane w milimetrach
          
     public:
          opakowanie();
          void ustawDlugosc(int wartosc){ dlugosc=wartosc; };
          void ustawSzerokosc(int wartosc){ szerokosc=wartosc; };
          void ustawWysokosc(int wartosc){ wysokosc=wartosc; };
          int pobierzDlugosc(){ return dlugosc; };
          int pobierzSzerokosc(){ return szerokosc; };
          int pobierzWysokosc(){ return wysokosc; };
};
opakowanie::opakowanie():rodzajeOpakowan(){
                                           cout << "opakowanie" << endl;
     dlugosc = szerokosc = wysokosc = 0;
}

//Klasa rodzaj leku ze swoimi skladowymi
class rodzajLeku{
     protected:
          string typLeku;
     
     public:
          rodzajLeku();
          void ustawRodzajLeku(string nazwa){ typLeku = nazwa; };
          string pobierzRodzajLeku(){ return typLeku; };
};
rodzajLeku::rodzajLeku(){
                         cout << "rodzajLeku" << endl;
     typLeku="brak danych";
}

//Klasa producent ze skladowymi
class producent{
     protected:
          string nazwaProducenta;
          class daneAdresoweProducenta;
          daneAdresoweProducenta *wskNaAdresProducenta;
     
     public:
          producent();
          ~producent();
          void ustawNazweProducenta(string wartosc){ nazwaProducenta=wartosc; };
          void ustawAdresProducenta(string wartosc);
          string pobierzNazweProducenta(){ return nazwaProducenta; };
          string pobierzAdresProducenta();
};
     //klasa zagniezdzona klasy producent ze skladowymi
class producent::daneAdresoweProducenta{
     friend class producent;
     friend class pochodzenieLeku;
     friend class lek;
     friend class przedmiotyNaStanie;
     friend class przedmiotyDoZamowienia;
     protected:
          string adresProducenta;
     public:
           daneAdresoweProducenta();
           void ustawAdresProducenta(int wartosc){ this->adresProducenta=wartosc; };
           string pobierzAdresProducenta(){ this->adresProducenta; };
};
producent::daneAdresoweProducenta::daneAdresoweProducenta(){
                                                            cout << "daneAdresoweProducenta" << endl;
     adresProducenta="brak danych";
}

//ciag dalszy skladowych klasy producent
producent::producent(){
                       cout << "producent" << endl;
     nazwaProducenta="brak danych";
     wskNaAdresProducenta=new daneAdresoweProducenta;
}
producent::~producent(){
                        cout << "destruktor producenta" << endl;
     delete wskNaAdresProducenta;
}
void producent::ustawAdresProducenta(string wartosc){
     wskNaAdresProducenta->adresProducenta=wartosc;
}
string producent::pobierzAdresProducenta(){
     return wskNaAdresProducenta->adresProducenta;
}

//Klasa hurtownia ze skladowymi
class hurtownia{
     protected:
          string nazwaHurtowni;
          class daneAdresoweHurtowni;
          daneAdresoweHurtowni *wskNaAdresHurtowni;
     
     public:
          hurtownia();
          ~hurtownia();
          void ustawNazweHurtowni(string wartosc){ nazwaHurtowni=wartosc; };
          void ustawAdresHurtowni(string wartosc);
          string pobierzNazweHurtowni(){ return nazwaHurtowni; };
          string pobierzAdresHurtowni();
};
     //klasa zagniezdzona klasy hurtownia ze skladowymi
class hurtownia::daneAdresoweHurtowni{
     friend class hurtownia;
     friend class pochodzenieLeku;
     friend class lek;
     friend class przedmiotyNaStanie;
     friend class przedmiotyDoZamowienia;
     protected:
          string adresHurtowni;
     public:
           daneAdresoweHurtowni();
           void ustawAdresHurtowni(int wartosc){ this->adresHurtowni=wartosc; };
           string pobierzAdresHurtowni(){ this->adresHurtowni; };
};
hurtownia::daneAdresoweHurtowni::daneAdresoweHurtowni(){
                                                        cout << "daneAdresoweHurtowni" << endl;
     adresHurtowni="brak danych";
}

//ciag dalszy skladowych klasy hurtownia
hurtownia::hurtownia(){
                       cout << "hurtownia" << endl;
     nazwaHurtowni="brak danych";
     wskNaAdresHurtowni=new daneAdresoweHurtowni;
}
hurtownia::~hurtownia(){
                        cout << "destruktor hurtowni" << endl;
     delete wskNaAdresHurtowni;
}

void hurtownia::ustawAdresHurtowni(string wartosc){
     wskNaAdresHurtowni->adresHurtowni=wartosc;
}
string hurtownia::pobierzAdresHurtowni(){
     return wskNaAdresHurtowni->adresHurtowni;
}

class pochodzenieLeku : public producent, public hurtownia{
     protected:
          
     public:
          pochodzenieLeku();
};
pochodzenieLeku::pochodzenieLeku():producent(),hurtownia(){
                                                           cout << "pochodzenie leku" << endl;
     nazwaProducenta=wskNaAdresProducenta->adresProducenta=nazwaHurtowni=wskNaAdresHurtowni->adresHurtowni="brak danych";
}

//Klasa lek wraz ze swoimi skladowymi
class lek : public opakowanie, public rodzajLeku, public pochodzenieLeku{
     protected:
          int dataWaznosci;
          bool recepta;
     public:
          lek();
          void ustawDateWaznosci(int wartosc){ dataWaznosci=wartosc; };
          void ustawRecepte(bool wartosc){ recepta=wartosc; };
          virtual void wyswietl(){};
          int pobierzDateWaznosci(){ return dataWaznosci; };
          bool pobierzRecepte(){ return recepta; };
};
lek::lek():opakowanie(), rodzajLeku(), pochodzenieLeku(){
                         cout << "lek" << endl;
     dataWaznosci=0;
     recepta=0;
}

//Klasa przedmioty na stanie wraz ze swoimi skladowymi
class przedmiotyNaStanie : public lek{
     //friend void ustawPromocje(przedmiotyNaStanie *wskPrzedmiotowNaStanie, int iloscPrzedmiotowNaStanie);
     
     protected:
          int idLeku;
          int idPolki;
          int iloscNaPolce;
          float cena;
          bool czyWPromocji;
          
          //const int szansaNaPromocje;
          static const int iloscPromocji();
          
     public:
          przedmiotyNaStanie();
          przedmiotyNaStanie(int idLeku, int idPolki=0, int iloscNaPolce=0, float cena=0, bool czyWPromocji=0, string rodzajOpakowania="brak danych", int dlugosc=0, int szerokosc=0, int wysokosc=0, string typLeku="brak danych", string nazwaProducenta="brak danych", string adresProducenta="brak danych", string nazwaHurtowni="brak danych", string adresHurtowni="brak danych", int dataWaznosci=0, bool recepta=0);
          void ustawIdPolki(int wartosc){ idPolki=wartosc; };
          void ustawIloscNaPolce(int wartosc){ iloscNaPolce=wartosc; };
          void ustawCene(float wartosc){ cena=wartosc; };
          void wyswietl();
          int pobierzIdLeku(){ return idLeku; };
          int pobierzIdPolki(){ return idPolki; };
          int pobierzIloscNaPolce(){ return iloscNaPolce; };
          float pobierzCene(){ return cena; };
          bool pobierzPromocje(){ return czyWPromocji; };
          
          //dodac przeciazanie operatorow!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
};
przedmiotyNaStanie::przedmiotyNaStanie():lek()/*:szansaNaPromocje(15)*/{
                                                                        cout << "przedmioty na stanie" << endl;
     idLeku=idPolki=iloscNaPolce=0;
     cena=0;
     czyWPromocji=0;
}
przedmiotyNaStanie::przedmiotyNaStanie(int idLeku, int idPolki, int iloscNaPolce, float cena, bool czyWPromocji, string rodzajOpakowania, int dlugosc, int szerokosc, int wysokosc, string typLeku, string nazwaProducenta, string adresProducenta, string nazwaHurtowni, string adresHurtowni, int dataWaznosci, bool recepta):lek()/*:szansaNaPromocje(15)*/{
     this->idLeku=idLeku;
     this->idPolki=idPolki;
     this->iloscNaPolce=iloscNaPolce;
     this->cena=cena;
     this->czyWPromocji=czyWPromocji;
     this->rodzajOpakowania=rodzajOpakowania;
     this->dlugosc=dlugosc;
     this->szerokosc=szerokosc;
     this->wysokosc=wysokosc;
     this->typLeku=typLeku;
     this->nazwaProducenta=nazwaProducenta;
     wskNaAdresProducenta->adresProducenta=adresProducenta;
     this->nazwaHurtowni=nazwaHurtowni;
     wskNaAdresHurtowni->adresHurtowni=adresHurtowni;
     this->dataWaznosci=dataWaznosci;
     this->recepta=recepta;
}
void przedmiotyNaStanie::wyswietl(){
     cout << "sposob wyswietlania" << endl;
}

//Klasa przedmiotyDoZamowienia wraz ze swoimi skladowymi
class przedmiotyDoZamowienia : public lek{
     protected:
          int iloscDoZamowienia;
          float maksCena;
     public:
          przedmiotyDoZamowienia();
          przedmiotyDoZamowienia(int wartosc);
          void ustawIloscDoZamowienia(int wartosc){ iloscDoZamowienia=wartosc; };
          void ustawMaksCene(float wartosc){ maksCena=wartosc; };
          void wyswietl();
          int pobierzIloscDoZamowienia(){ return iloscDoZamowienia; };
          float pobierzMaksCene(){ return maksCena; };
};
przedmiotyDoZamowienia::przedmiotyDoZamowienia(){
}
przedmiotyDoZamowienia::przedmiotyDoZamowienia(int wartosc){
     iloscDoZamowienia=wartosc;
}
void przedmiotyDoZamowienia::wyswietl(){
     cout << "sposob wyswietlania" << endl;
}


void wypelnijWektorDanymiZBazy(vector<przedmiotyNaStanie> &wektorPosiadanychLekow){
     int idLeku=0;
     int idPolki=0;
     int iloscNaPolce=0;
     float cena=0;
     bool czyWPromocji=0;
     string rodzajOpakowania="";
     int dlugosc=0;
     int szerokosc=0;
     int wysokosc=0;
     string typLeku="cos";
     string nazwaProducenta="cosik";
     string adresProducenta="abc";
     string nazwaHurtowni="ads";
     string adresHurtowni="123";
     int dataWaznosci=0;
     bool recepta=0;
     //wektorPosiadanychLekow.push_back(przedmiotyNaStanie(idLeku, idPolki, iloscNaPolce, cena, czyWPromocji, rodzajOpakowania, dlugosc, szerokosc, wysokosc, typLeku, nazwaProducenta, adresProducenta, nazwaHurtowni, adresHurtowni, dataWaznosci, recepta));
}

class testowK : public pochodzenieLeku, public rodzajLeku{
     int obiekt;
};

int main(int argc, char *argv[])
{
    
    vector<przedmiotyNaStanie> wektorPosiadanychLekow;
    wektorPosiadanychLekow.push_back(przedmiotyNaStanie());
    //wypelnijWektorDanymiZBazy(wektorPosiadanychLekow);
    
    cout << wektorPosiadanychLekow[0].pobierzRodzajLeku() << endl;
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
0

jakbyś sprecyzował w czym dokładnie jest problem i wkleił 4 razy krótszy kod, który pokazuje tylko mniej więcej miejsce błędu to może komuś by się chciało ci pomóc

0

problem w tym że nie wiem od której strony z tym błędem ruszyć, polega on głównie na dziedziczeniu konstruktorów i destruktorów i ich wywoływaniu w vector'ze, okroiłem teraz kod jak potrafiłem z zachowaniem błędu i idei projektu, wystarczy wkleić przykładowo do DEVa i Od razu widać na czym polega błąd, prawdopodobnie jest to próba zwolnienia już zwolnionej pamięci

#include <cstdlib>
#include <iostream>
#include <fstream>
#include <conio.h>
#include <iomanip>
#include <vector>
#include <algorithm>

using namespace std;

//Klasa rodzaji opakowan ze swoimi skladowymi
class rodzajeOpakowan{
     protected: 
          string rodzajOpakowania;
      
     public:
          rodzajeOpakowan();
};
rodzajeOpakowan::rodzajeOpakowan(){
     rodzajOpakowania="brak danych";
}

//Klasa opakowanie ze swoimi skladowymi
class opakowanie : public rodzajeOpakowan{
     protected:
          int dlugosc, szerokosc, wysokosc;   //dane w milimetrach
          
     public:
          opakowanie();
};
opakowanie::opakowanie():rodzajeOpakowan(){
     dlugosc = szerokosc = wysokosc = 0;
}

//Klasa rodzaj leku ze swoimi skladowymi
class rodzajLeku{
     protected:
          string typLeku;
     
     public:
          rodzajLeku();
};
rodzajLeku::rodzajLeku(){
     typLeku="brak danych";
}

//Klasa producent ze skladowymi
class producent{
     protected:
          string nazwaProducenta;
          class daneAdresoweProducenta;
          daneAdresoweProducenta *wskNaAdresProducenta;
     
     public:
          producent();
          ~producent();
};
     //klasa zagniezdzona klasy producent ze skladowymi
class producent::daneAdresoweProducenta{
     friend class producent;
     friend class pochodzenieLeku;
     friend class lek;
     friend class przedmiotyNaStanie;
     friend class przedmiotyDoZamowienia;
     protected:
          string adresProducenta;
     public:
           daneAdresoweProducenta();
};
producent::daneAdresoweProducenta::daneAdresoweProducenta(){
     adresProducenta="brak danych";
}

//ciag dalszy skladowych klasy producent
producent::producent(){
     nazwaProducenta="brak danych";
     wskNaAdresProducenta=new daneAdresoweProducenta;
}
producent::~producent(){
                        cout << "destruktor producenta" << endl;
     delete wskNaAdresProducenta;
}

//Klasa hurtownia ze skladowymi
class hurtownia{
     protected:
          string nazwaHurtowni;
          class daneAdresoweHurtowni;
          daneAdresoweHurtowni *wskNaAdresHurtowni;
     
     public:
          hurtownia();
          virtual ~hurtownia();
};
     //klasa zagniezdzona klasy hurtownia ze skladowymi
class hurtownia::daneAdresoweHurtowni{
     friend class hurtownia;
     friend class pochodzenieLeku;
     friend class lek;
     friend class przedmiotyNaStanie;
     friend class przedmiotyDoZamowienia;
     protected:
          string adresHurtowni;
     public:
           daneAdresoweHurtowni();
};
hurtownia::daneAdresoweHurtowni::daneAdresoweHurtowni(){
     adresHurtowni="brak danych";
}

//ciag dalszy skladowych klasy hurtownia
hurtownia::hurtownia(){
     nazwaHurtowni="brak danych";
     wskNaAdresHurtowni=new daneAdresoweHurtowni;
}
hurtownia::~hurtownia(){
                        cout << "destruktor hurtowni" << endl;
     delete wskNaAdresHurtowni;
}

class pochodzenieLeku : public hurtownia, public producent{
     protected:
          
     public:
          pochodzenieLeku();
          ~pochodzenieLeku(){};
};
pochodzenieLeku::pochodzenieLeku():hurtownia(), producent(){
     //nazwaProducenta=wskNaAdresProducenta->adresProducenta=nazwaHurtowni=wskNaAdresHurtowni->adresHurtowni="brak danych";
}

//Klasa lek wraz ze swoimi skladowymi
class lek : public opakowanie, public rodzajLeku, public pochodzenieLeku{
     protected:
          int dataWaznosci;
          bool recepta;
     public:
          lek();
          ~lek(){};
          virtual void wyswietl(){};
};
lek::lek():opakowanie(), rodzajLeku(), pochodzenieLeku(){
     dataWaznosci=0;
     recepta=0;
}

//Klasa przedmioty na stanie wraz ze swoimi skladowymi
class przedmiotyNaStanie : public lek{
     friend void ustawPromocje(przedmiotyNaStanie *wskPrzedmiotowNaStanie, int iloscPrzedmiotowNaStanie);
     
     protected:
          int idLeku;
          int idPolki;
          int iloscNaPolce;
          float cena;
          bool czyWPromocji;
          
          //const int szansaNaPromocje;
          static const int iloscPromocji();
          
     public:
          przedmiotyNaStanie();
          ~przedmiotyNaStanie(){};
};
przedmiotyNaStanie::przedmiotyNaStanie()/*:szansaNaPromocje(15)*/{
     idLeku=idPolki=iloscNaPolce=0;
     cena=0;
     czyWPromocji=0;
}

int main(int argc, char *argv[])
{
    
    vector<przedmiotyNaStanie> wektorPosiadanychLekow;
    wektorPosiadanychLekow.push_back(przedmiotyNaStanie());
    wektorPosiadanychLekow.push_back(przedmiotyNaStanie());
    wektorPosiadanychLekow.push_back(przedmiotyNaStanie());
    //cout << wektorPosiadanychLekow[0].pobierzRodzajLeku() << endl;
    
    system("PAUSE");
    return EXIT_SUCCESS;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1