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

Kod u vise fajlova - problem pri kompajliranju

[es] :: C/C++ programiranje :: Kod u vise fajlova - problem pri kompajliranju

[ Pregleda: 1734 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

vilyu
Web Developer
Beograd, Srbija

Član broj: 1188
Poruke: 444



+2 Profil

icon Kod u vise fajlova - problem pri kompajliranju15.09.2005. u 09:56 - pre 226 meseci
Zdravo,

Pisem neku klasu i u zelji da moj kod bude dobro organizovan, odlucio sam da je odvojim od koda sa main funkcijom. Prebacio sam je u drugi cpp fajl, inkludovao ga, a onda je kompajler poceo da prijavljuje: multiple definition of member function za konstruktor moje klase koji je definisan izvan tela klase, a u istom fajlu gde i klasa.

Pretrazio sam Google i ES i ustanovio da je resenje da definicije (interfejs klase) izdvojim u adekvatne header fajlove, koje bih ogradio pretprocesorskim direktivama da se ne ucitavaju vise puta, a da implementaciju stavim u cpp fajlove. E sad, obicno su se tu zavrsavali svi komentari koje sam nasao na Google-u i ES-u, jer su se u tom momentu postavljaci pitanja zahvaljivali na odgovoru i sve im je radilo.

Meni sada kompajler prijavljuje:
- Kad u header stavim samo
Code:
class MojaKlasa;
variable MojaKlasa Objekat has initializer but incomplete type
- Kad (u header) stavim
Code:
class MojaKlasa : public Window {};
dobijem: expected class-name before "{" token
- Kad u konstruktoru klase ostavim u listi inicijalizacija poziv konstruktora roditeljske klase, onda kaze da u klasi nemam datog polja (s imenom pozvanog konstruktora)
- OK, sad i to izbacim iz deklaracije, ostaje naveden konstruktor sa navedenim tipovima argumenata koje dobija. Kao novu gresku, kompajler za implementaciju konstruktora prijavljuje da redefinisem prethodno definisanu f-ju
- I tako jos neki pokusaji, ali nista nisu urodili plodom

Dakle: Kako se pravilno stavljaju klase u druge fajlove?

Hvala!
Pera električar 0637129710, BG, preporučujem.
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.varmdo.se.

Sajt: dejan.lekic.org


+2 Profil

icon Re: Kod u vise fajlova - problem pri kompajliranju15.09.2005. u 10:24 - pre 226 meseci
Nepisano pravilo (ne mora ali je tako najpreglednije/najbolje) je da odvojis deklaracije u header fajl (.h ili .hh ili .hpp), a da definicije funkcija (metoda) stavis u cisti sors fajl (.cc, .cpp ili recimo .cxx).

Prost primer, fajl MojaKlasa.h
Code:

class MojaKlasa
{
  int _value;
  public:
    MojaKlasa(); // konstruktor
    ~MojaKlasa(); // destruktor
    void Value(int arg); // javni metod
    int Value(); // drugi javni metod
};

dok bi MojaKlasa.cpp izgledao ovako:
Code:

#include "MojaKlasa.h"

MojaKlasa::MojaKlasa()
{
  _value = 5;
}

int MojaKlasa::Value()
{
  return _value;
}

void MojaKlasa::Value(int arg)
{
  _value = arg;
}

Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

[es] :: C/C++ programiranje :: Kod u vise fajlova - problem pri kompajliranju

[ Pregleda: 1734 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

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