[ drekavac007 @ 29.08.2007. 02:26 ] @
Pozdrav svima, evo jednog problema koji pokusavam resiti, nesto nije u redu sa klasom ili pokazivacima, cilj je praviti police sa nizom knjiga... ali po unosenju 3. knjige win ljubazno moli da se microsoftu posalje informacija o problemu... bla bla...
prevodioc ne javlja nijedno upozorenje niti gresku... moze li neka strucna pomoc, hvala!

Code:

//main.cpp
#include "polica.h"
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
    int f=10;
    Polica e;
    e.kreiraj(f);
}




//knjiga.h
class Knjiga {
    int x;
public:
    Knjiga(int xx=0) {x=xx;}
    int prikaziX() const {return x;}
    void citaj();
    void pisi() const;
};



//knjiga.cpp
#include "knjiga.h"
#include <iostream>
using namespace std;

void Knjiga::pisi() const{
    cout<<x<<endl;
}

void Knjiga::citaj() {
    int x1;
    cout<<"broj knjige:";
    cin>>x1;
    x=x1;
}



//polica.h
#include "knjiga.h"

class Polica:public Knjiga {
    Knjiga** niz;
    int brp, kap;
    void brisi() {delete []niz;}
public:
    Polica(int k=10)
    { niz=new Knjiga* [kap=k]; }
    ~Polica() {brisi();}

    int kreiraj(int i) {
     Knjiga** niz=new Knjiga*[i];
     for(int m=0; m<i; m++)
         niz[m]->citaj();
    }


};


[Ovu poruku je menjao X Files dana 02.09.2007. u 21:34 GMT+1]
[ yaelo @ 29.08.2007. 15:45 ] @
Puno toga ti ne valja sa klasom Polica. Zašto je nasledjuješ iz Knjiga. Polica nije Knjiga. Umesto Knjiga** niz koristi std::vector<Knjiga>. Zatim funkcija Brisi oslobadja samo niz koji je ustvari niz pointera. A šta je sa pointerima u nizu niz.Takodje imaš problem sa funkcijom kreiraj. Probaj ovako:

Code:

class Polica {
    std::vector<Knjiga> niz;

public:
    Polica(int k=10) : niz (k) {}

   void kreiraj() {
        for (std::vector<Knjiga>::iterator iter = niz.begin(); iter < niz.end(); ++iter) {
            iter->citaj();
        }
    }
};



[Ovu poruku je menjao yaelo dana 29.08.2007. u 18:21 GMT+1]
[ drekavac007 @ 30.08.2007. 18:37 ] @
Evo izmenio sam malo na svoju ruku klasu Polica i funkciju kreiraj, da li sada postoji neki nacin da napravim funkciju(ispisi) koja ce izlistati niz knjiga....
aauuuuu bre zbuni me sad sa tim vektorima zelen sam ja za to al proucicu.
Code:

//polica.h
#include "knjiga.h"

class Polica{
    int brp;

public:
    Knjiga* nz;
    Polica(int k=10)
    { nz=new Knjiga [brp=k]; }
    ~Polica() {brisi();}

    int kreiraj(int m) {
     Knjiga niz[m];
     for(int i=0; i<m; i++)
         niz[i].citaj();
    }

    

    void brisi() {delete []nz;}

};


EDIT: X Files : Molim Vas da zbog preglednosti, kod upisujete između tag-ova predviđenih za to:

[code]
int main ( int argc, char *argv[] )
{
// ...
return 0;
}
[/code]

Sad će ti možda neko i pogledati kod...



[Ovu poruku je menjao X Files dana 02.09.2007. u 21:36 GMT+1]
[ drekavac007 @ 02.09.2007. 20:18 ] @
niko...???
[ nikoladsp @ 03.09.2007. 09:29 ] @
evo ti predlog resenja (ako sam dobro razumeo problem) u atachment-u.

imas klasu CBook koja opisuje knjigu i CBookshelf koja predstavlja policu koja sadrzi knjige.
ne bi trebalo da kreiras knjigu(e) u okviru police, niti da se mucis sa dinamickom alokacijom (koristi STL, sigurnije je i jednostavnije).
pogledaj sors, pa pitaj ako ti nesto nije jasno

poz
[ drekavac007 @ 04.09.2007. 01:33 ] @
Skapirao sam o cemu se radi i ovo bi moglo da bude resenje, hvala na pomoci!!! Ja sam pokusavao da Policu realizujem kao niz objekata tipa Knjiga ( ono niz[n] ) nekako mi je to najlogicnije da uradim pa cu i pored ovog tvog resenja probati da to napravim sa nizom, mada se i ne trudim fanaticno ali bice valjda za par dana :) u svakom slucaju svaka pomoc je opet dobrodosla... pozdrav.
[ drekavac007 @ 07.09.2007. 17:09 ] @
resenje:
Code:
   //main.cpp
#include "polica.h"
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
    int f=10;
    int ff=8;
    Polica e(f);
    Polica ee(ff);
  
    e.pisi();
    ee.pisi();
}

Code:
   //knjiga.h
class Knjiga {
    int x;
public:
    Knjiga(int xx=0) {x=xx;}
    int prikaziX() const {return x;}
    void citaj();
    void pisi() const;
};

Code:
   //knjiga.cpp
#include "knjiga.h"
#include <iostream>
using namespace std;

void Knjiga::pisi() const{
    cout<<x<<endl;
}

void Knjiga::citaj() {
    int x1;
    cout<<"broj knjige:";
    cin>>x1;
    x=x1;
}

Code:
   //polica.h
#include "knjiga.h"

class Polica{
    int brp;

public:
    Polica();
    Polica(int n);

    int get_brp(void) { return brp; }    

    void pisi();

};

Code:
   //polica.cpp
#include "polica.h"
#include <iostream>

Polica::Polica() {
   brp=1;
   niz=new Knjiga[0];
   niz[0]=0;
}

Polica::Polica(int n) {
   brp=n;
   niz=new Knjiga[n];
   for(int i=0; i<n; i++)
      niz[i].citaj;
}

void Polica::pisi() {
   int d=brp;
   for(int i=0; i<d; i++)
      niz[i].pisi();
}

klasa nije ni trebala biti izvedena...
fali destruktor al me mrzi
moze lock...

[Ovu poruku je menjao drekavac007 dana 07.09.2007. u 18:27 GMT+1]