Aktív témák

  • blaci947

    csendes tag

    Gondolom nem csak én írok több forrásfájlból álló programot...

    Azt már (tapasztalatból és kolis tanáromtól) megtanultam, hogy programot írni csak úgy érdemes, ha 1 hónap múlva is kristálytisztán átlátom, mi mit csinál.
    Ezért én a jól struktúrált programozás híve vagyok. Habár a Pascal nyelv még a C-nél is erősebben struktúrált, mégis C++ -ban programozok. (Hogy miért, annak sok indoka van, leginkább azért, mert elsőben ezt tanultuk az egyetemen... :) )
    Az átlátható programszerkezet kiépítését igen nagymértékben segíti a több forrásfájlra darabolás. Ezt viszont csak körültekintően lehet hiba nélkül megvalósítani. (Illetve előbb-utóbb elengedhetetlen az OOP használata.)

    Ez a topic remélem sokaknak hasznos lesz...

    Az adataink olyanok, mint az egészségünk: addig vigyázzunk rájuk, amíg megvannak! !!!

  • blaci947

    csendes tag

    Na, akkor le is írnám nem rég keletkezett problémámat:

    Szóval a következőt kéne MS Visual
    C++-ban: egy osztálydeklarációt több más fájlból is el
    kell, hogy érjek. Tehát csináltam egy header-fájlt.
    Viszot a többszörös include-ok miatt a
    főprogramba többször is bekerül a deklaráció.
    Ezért meg a fordító anyázik.

    A program szerkezete kb. ilyen:

    --------------------- A.h ----------------------

    class Osztaly
    {
    void Tagfuggveny ();
    };

    --------------------- A.cpp ---------------------

    #include ''A.h''

    Osztaly::Tagfuggveny()
    {
    ...
    }

    --------------------- Main.cpp ---------------------

    #include ''A.h''

    Osztaly o;

    ...

    ----------------------------------------------------

    Ezért persze nem szól semmit. A baj ott van, mikor sok
    forrásfájlom van, kb. mindenki mindenkit használ, és
    lényegében:

    #include ''A.h''
    #include ''A.h''

    keletkezik.

    Erre a fordító kidobja, hogy:

    error C2011: 'Osztaly' : 'class' type redefinition

    Tud valaki valami megoldást? Előre is nagyon köszi a
    segítséget. :)

    Laci

    Az adataink olyanok, mint az egészségünk: addig vigyázzunk rájuk, amíg megvannak! !!!

  • Miracle

    senior tag

    Szervusz.
    tobb tanacsom is lenne:
    1: Ezt a topicot zarasd be szepen 1 moderatorral, es a tobbi kerdesedet a meglevo sok c++ topic egyikeben tedd fel, TENYLEG nem kell meg egy.
    2: a problema visual c++tol fuggetlen, es valojaban mar a C nyelv fejlesztesekor elokerult, es megoldottak:

    ----- A.h -------
    #ifndef A_H
    #define A_H
    class a
    {/*...*/};
    #endif // A_H
    ---- A.h END -----

    ezzel csak annyi problema van, hogy A nev nem jelent semmit, talalj ki valami jobbat, ami jellemzo arra az adatstrukturara, amit megvalosit az osztaly. ez a megoldas a problemak nagyreszet megoldja, de tovabbra is rpoblemat jelenthet, hogy kulonallo forditasi egysegekbe is belekerulhetnek a .h fileban kidolgozott fuggvenyek kodjai, ezert csak inline fuggvenyeket definialj a .h-ban, de ha nem muszaly azokat se.
    szerk: erdemes atgondolni a forrasfilera tagolast, ha csak 1 osztaly van 1 .h fileban, akkor szepen azt a nevet illik adni a filenak, es az osztalyt meg ERTELMESEN kell elnevezni, ergo az ,,Osztaly'' nagyon rossz nev. csak azert ne legyen osztalyod, mert azt tanultad, erre a fuggvenyeket hasznaljuk. tobb osztaly definicioja meg csak akkor legyen 1 .h fileban, ha azok egyutt valositanak meg valami funkcionaitast, es kulon kulon nincs ertelmuk.
    meg 1-2 tanacs: gyakran rosszak azok az osztalyok, amik inkabb csak fuggvenyeket tartalmaznak, amik esetleg kozos adatokon vegeznek muveleteket. ez rossz programtervezes, ezt nagyon keves helyen tanitjak, es akkor is sok gyakorlat kell hozza, hogy valamire haszalni tudd, de mindenesetre erdemes utanaolvasni, honapokat lehet vele sporolni:) tehat a c++ban nem veletlenul maradtak benne a fuggvenyek, az osztalyokat adatabsztrakciohoz hasznaljuk fel!
    es akkor a tovabbi kerdeseket a forum jobb oldalan talalhato kereso segitsegevel megtalalhato SOK SOK c++ topic barmelyikeben, ha lehet...

    [Szerkesztve]

    értelmező késziszótár :: rekurzió --> lásd : rekurzió

  • blaci947

    csendes tag

    válasz Miracle #3 üzenetére

    Szervusz!

    Először is nagyon köszönöm a tanácsodat! Tényleg ez a megoldás! Erre nem gondoltam...

    Másodszor, kerestem hasonló témájú topicot, de nem találtam. Úgy gondoltam, hasznos egy ilyen önálló topic is, de ha egy erre járó moderátor nem így látja, nyugodtan zárhatja a topicot. (Sőt ilyen esetben erre meg is kérem!)

    Csak megnyugtatásul: természetesen a programban nem A.h név szerepel. :) Így ténleg csak óvodás programozna.
    Amit az osztályokról írtál: valóban adatabsztrakció esete forog fenn. :) (Függvényeken kell műveleteket végezni, miközben azok értéke pontonként adott...)
    Szerk.: A.h meg hasonló nevekt azért írtam, mert én pl. utálom, ha valaki begépeli a fél forráskódot, és felteszi a kérdést: ''Miért nem működik?'' Ilyeneken sajnos nem segíthetek, mert még a saját kódomban is gyűlölök hibát keresni, hátmég máséban. (Ami másé: az sokkal szebb, jobb, gyorsabb, mint az enyém, csak épp más logikájával készült...
    Szerk.: hejesírás... :DD



    [Szerkesztve]

    Az adataink olyanok, mint az egészségünk: addig vigyázzunk rájuk, amíg megvannak! !!!

Aktív témák