[ cdjole @ 12.07.2007. 00:20 ] @
Pozdrav svima. Ne znam da l sam dobro postavio naslov, al mislim da je to to.:) Poceo sam od nedavno da radim u C++Builderu 6. Do sada sam radio samo neke proste stvari, onako za vezbu, koristio komponente i klase vec implementirane u BCB-u i to je proslo OK. E juce sam poceo da pravim neki projekat u kome mi je izmedju ostalog potrebno da omogucim unos kupaca, sa odredjenim podacima. Zamislio sam da to odradim tako sto cu strukturu kupac smestati u niz i posle vaditi od podataka ono sto mi je potrebno. Zato sam napravio klasu "nizKupaca", ali problem je nastao kada je trebalo da je ubacim u projekat. Evo ga .h fajl:

Code:

#ifndef NIZKUPACA_H
    #define NIZKUPACA_H
#include <iostream.h>
#include <dstring.h>

typedef struct {
    String ime;
    String opis;
    String adresa;
    String brRacuna;
    String pib;
} TKupac;

class nizKupaca {
    private:
        TKupac *niz;
        int n;
    public:
        nizKupaca() {n=0; niz = NULL;}
        nizKupaca(TKupac kp) {n=1; niz = new TKupac[n]; niz[0] = kp;}
        nizKupaca(const TKupac *, const int);

        nizKupaca(const nizKupaca &);
        ~nizKupaca();

        nizKupaca& operator = (const nizKupaca &);
        nizKupaca& operator += (const nizKupaca &);
        friend ostream &operator << (ostream &, const nizKupaca &);
        friend istream &operator >> (istream &, const nizKupaca &);
        void Delete(){n=0; delete []niz;}
};
#endif


Evo i deo .cpp fajla koji je od interesa trenutno:

Code:

#include <iostream.h>
#include "kupci.h"

nizKupaca :: nizKupaca(const TKupac *kp, const int duz){ //************
    n = duz;
    niz = new TKupac[n];
    for(i=0; i<n; i++)
        niz[i] = kp[i];
}

//nastavak koda


Problem je u tome sto mi javlja sledecu gresku:

"[C++ Fatal Error] sysmac.h(8): F1003 Error directive: Do not include this file directly. Include 'system.hpp'."


Ono sto razumem je da ne treba da ukljucujem fajl direktno, vec "system.hpp". E sad, umesto kojeg fajla, jer ako izbacim "kupci.h" i ubacim "system.hpp", onda izbaci:

"[C++ Error] kupci.cpp(4): E2090 Qualifier 'nizKupaca' is not a class or namespace name
[C++ Error] kupci.cpp(4): E2040 Declaration terminated incorrectly"

i obelezi oznaceni red u prethodnom kodu. Ovo prvo je logicno, jer nigde nema definisano sta je nizKupaca posto nema .h fajla ukljucenog, a i ovo drugo pretpostavljam da ima veze s tim.

Moze li mi neko objasniti zasto se onda javlja prva greska i kako ubacujem klase u projekat? Mozda nisam trebao direktno da ih ubacujem u projekat, vec ima neki drugi nacin? Kao sto sam rekao, tek sam poceo da radim u BCB-u, pa mi neke stvari nisu bas najjasnije.
[ X Files @ 12.07.2007. 08:14 ] @
Citat:

[...] jer ako izbacim "kupci.h" i ubacim "system.hpp" [...]

Ovo si pogrešno razumeo. Niko nije rekao da treba da izbaciš kupci.h.

Ovde je problem direktno include-ovanje Delphi stringova #include <dstring.h>, što lepo i piše. Jedno od rešenja je da ukloniš #include <dstring.h> iz kupci.h i da uključiš samo:
--- Kupci.h ---
Code:

// ...
#include <vcl.h>
// ...

...ili ono što ti kompajler i kaže, da uključiš samo:
Code:

// ...
#include <system.hpp> // <--- Ovo će interno uključiti i #include <dstring.h>
// ...


Takođe, obrati pažnju kako BCB6 IDE generiše konstrukciju #ifndef / #define:
Code:

#ifndef Unit1H
#define Unit1H

Iako će savršeno raditi i onako kako si stavio, mislim da BCB6 IDE bolje razume kada se stavi
Code:

#ifndef KUPCIH
#define KUPCIH

... jer tada automatski otvori header TAB u footeru editora.
[ cdjole @ 12.07.2007. 08:33 ] @
Hvala druze, znao sam da nije logicno da iskljucujem svoj header fajl, samo nisam skonto sta je trebalo.:) Sad cu to izmeniti.