Note that there are some explanatory texts on larger screens.

plurals
  1. POCreate array of class objects inside another class
    primarykey
    data
    text
    <p>I have a problem. I'm trying to create an array of different class objects derived from a base class. This is the code:</p> <pre><code> class Cdvd{ protected: char *numeArtist; //numer artist sau film char *tip;// CD sau DVD int cantitate; //numar de CD/DVD din baza de date int pret; //pret per unitate int cod_intern; //cod intern produs. Spre exemplu 0 pentru un film horror. void scriereInFisier(std::fstream &amp;out); //scriere in fisierul cu produse public: Cdvd(); //constructor produs implicit Cdvd(const Cdvd &amp;cdvd); //constructor produs cu parametru alt produs Cdvd(char *artist, char *tip, int cant, int pret, int cod_int); //constructor produs cu parametri ~Cdvd(); //destructor produs char *getNume(); //returneaza pointer la numele artistului sau filmului void parseFis(char *artist, char *tip, int cant, int pret, int cod_int); virtual void afisCamp()=0; //afiseaza campurile produsului }; class CD : public Cdvd{ private: char *genMuzica; //genul muzicii char *extensie; //extensia fisierelor audio int nrTrackuri; //numar melodii int lungime; //lungime totala melodii public: CD(); //constructor implicit cd CD(char *artist, int cant, int pret, int cod_int, char *genMuzica, char *extensie, int nrTrackuri, int lungime); CD(const CD &amp;cd); //constructor cd cu parametru alt cd ~CD(); //destructor cd void parseFis(char *artist, int cant, int pret, int cod_int, char *genMuzica, char *extensie, int nrTrackuri, int lungime); void afisCamp(); //afiseaza campurile cd-ului }; class DVD : public Cdvd{ private: char *genFilm; char *extensie; int lungime; public: DVD(); DVD(char *artist, int cant, int pret, int cod_int, char *genFilm, char *extensie, int lungime); ~DVD(){cout&lt;&lt;"~DVD()"&lt;&lt;endl;}; void parseFis(char *artist, int cant, int pret, int cod_int, char *genFilm, char *extensie, int lungime); void afisCamp(); }; </code></pre> <p>Now, I'm trying to create from this class an array of CD and DVD:</p> <pre><code>class ListaProduse{ static const int dimMax=20; //dimensiune maxima lista produse Cdvd **vector; //vector in care se retin produsele int nrProduse; //retine cate produse sunt in baza de date public: ListaProduse(); ~ListaProduse(); void adauga(std::fstream &amp;in); void afisare(); }; </code></pre> <p>and this is the code for ListaProduse class:</p> <pre><code>ListaProduse::ListaProduse() { nrProduse=0; vector=new Cdvd*[dimMax]; } ListaProduse::~ListaProduse() { if(nrProduse&gt;0) { delete vector; } } void ListaProduse::adauga(std::fstream &amp;in) { if(in.is_open()) { int pret,cant,cod; char temp1[20],aux1[20]; char aux; while(!in.eof()) { in&gt;&gt;aux; in&gt;&gt;temp1; char *teemp1=new char[strlen(temp1)+1]; strcpy(teemp1,temp1); in&gt;&gt;pret; in&gt;&gt;cant; in&gt;&gt;cod; switch(aux){ case 'C':{ int nrTr,lung; in&gt;&gt;aux1; char *auxiliar1=new char[strlen(aux1)+1]; strcpy(auxiliar1,aux1); in&gt;&gt;aux1; char *auxiliar2=new char[strlen(aux1)+1]; strcpy(auxiliar2,aux1); in&gt;&gt;nrTr; in&gt;&gt;lung; CD *x; x=new CD; x-&gt;parseFis(teemp1,pret,cant,cod,auxiliar1,auxiliar2,nrTr,lung); vector[nrProduse]=x; vector[nrProduse]-&gt;afisCamp(); //cout&lt;&lt;vector[nrProduse]-&gt;numeArtist; nrProduse++; break; } case 'D':{ int lung; in&gt;&gt;aux1; char *auxiliar1=new char[strlen(aux1)+1]; strcpy(auxiliar1,aux1); in&gt;&gt;aux1; char *auxiliar2=new char[strlen(aux1)+1]; strcpy(auxiliar2,aux1); in&gt;&gt;lung; DVD *x; x=new DVD; x-&gt;parseFis(teemp1,pret,cant,cod,auxiliar1,auxiliar2,lung); vector[nrProduse]=x; vector[nrProduse]-&gt;afisCamp(); nrProduse++; break; } }; } } } void ListaProduse::afisare() { if(nrProduse&gt;0) for(int i=0;i&lt;nrProduse;i++) { this-&gt;vector[nrProduse]-&gt;afisCamp(); } else cout&lt;&lt;"Nu exista produse in baza de date!"&lt;&lt;endl; } </code></pre> <p>Now I create in main an instance of ListaProduse. I call ListaProduse.adauga(filein) and then ListaProduse.afisare(). The problem is that when I call afisare() the program stop working and says: </p> <blockquote> <p>Unhandled exception at 0x00ba3055 in test.exe: 0xC0000005: Access violation reading location 0xcdcdcdcd.</p> </blockquote> <p>pointing to </p> <blockquote> <p>this->vector[nrProduse]->afisCamp();</p> </blockquote> <p>What could be the problem? Can anyone help me? Thanks!</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload