Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Izuzeci: Pomoć oko primjera

[es] :: C/C++ programiranje :: C/C++ za početnike :: Izuzeci: Pomoć oko primjera

[ Pregleda: 3418 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

daniel_trifunovic

Član broj: 88267
Poruke: 48
*.adsl-1.sezampro.yu.



Profil

icon Izuzeci: Pomoć oko primjera12.06.2007. u 17:20 - pre 205 meseci
Pisao sam si primjer, kako bih shvatio tematiku. Kompajler mi prijavljuje dvije greške:

1) Error 2 error LNK2019: unresolved external symbol "public: __thiscall Popunjen::~Popunjen(void)" (??1Popunjen@@QAE@XZ) referenced in function "public: void __thiscall Niz::uBroj(int)" (?uBroj@Niz@@QAEXH@Z) program.obj
2) Error 3 fatal error LNK1120: 1 unresolved externals C:\Documents and Settings\daniel\My Documents\Visual Studio 2005\Projects\temp\Debug\temp.exe 1

Problematični kod:

Code:
//niz.h
#ifndef _NIZ_H_
#define _NIZ_H_
#include "greska.h"

class Niz {
    int *broj, kap, pop;
public:
    Niz(int k=5) { broj=new int[kap=k]; pop=0; }
    int operator [](int i) {
        if(i<0 || i>9) throw VanOpsega();
        else return broj[i];
    }
    void uBroj(int b) {
        if(pop==kap) throw Popunjen();
        else broj[pop++]=b;
    }
    ~Niz() { delete []broj; }
};
#endif


Code:
//greska.h
#ifndef _GRESKA_H_
#define _GRESKA_H_
#include <iostream>
#include <cstring>
using namespace std;

class Greska {
    char *poruka;
public:
    Greska(const char *tekst) {
        poruka=new char[strlen(tekst+1)];
        strcpy(poruka, tekst);
    }
        Greska(const Greska &g){
        poruka=new char[strlen(g.poruka+1)];
        strcpy(poruka, g.poruka);
    }
    friend ostream& operator <<(ostream& it, const Greska &g) {
        return it<<"***GRESKA: "<<g.poruka<<"***"<<endl;
    }
    ~Greska() { delete []poruka; }
};

class VanOpsega: public Greska {
public:
    VanOpsega(): Greska("Indeks je van opsega.") {}
    ~VanOpsega();
};

class Popunjen: public Greska {
public:
    Popunjen(): Greska("Niz je popunjen.") {}
    ~Popunjen();
};
#endif


Code:
//program.cpp
#include "niz.h"

void main() {
    Niz n1;
    
    while(1) {    
        try {
            cout<<"unesi broj: ";
            int broj; cin>>broj; if(!broj) break;
            n1.uBroj(broj);
        }
        catch(Greska g) { cout<<g; }
    }    
}


[Ovu poruku je menjao daniel_trifunovic dana 12.06.2007. u 22:30 GMT+1]
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.dynamic.sbb.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Izuzeci: Pomoć oko primjera12.06.2007. u 17:53 - pre 205 meseci
Ako sam dobro video (iz Loga-a) nemaš implementaciju destruktora: ~Popunjen();
 
Odgovor na temu

daniel_trifunovic

Član broj: 88267
Poruke: 48
*.adsl-1.sezampro.yu.



Profil

icon Re: Izuzeci: Pomoć oko primjera12.06.2007. u 20:35 - pre 205 meseci
U pravu si, Vladimire. Hvala ti. Oko toga se bunio kompajler. Obrisao sam destruktore za obe izvedene klase i problem sa kompajliranjem je riješen. Ipak, novi problem(HEAP CORRUPTION) se pojavljuje pri radu programa. U test programu(program.cpp) je kod za testiranje klasa. Treba unositi brojeve, najviše 5, i da mi pri pokušaju unosa 6-og, preko izuzetka prijavi grešku.
 
Odgovor na temu

daniel_trifunovic

Član broj: 88267
Poruke: 48
*.adsl-1.sezampro.yu.



Profil

icon Re: Izuzeci: Pomoć oko primjera12.06.2007. u 23:13 - pre 205 meseci
Problem riješen(nisam stavio exit(); u catch proceduri pa je program nastavljao da piše u memoriju, iako prostor, za to, nije rezervisan). Hvala još jednom Vladimire, i ostalima koji su posvijetili vrijeme čitanju.
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: Izuzeci: Pomoć oko primjera

[ Pregleda: 3418 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.