Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Modularisointi

Zmyrgel [12.03.2006 12:16:43]

#

Elikkäs nyt olisi usea luokka valmiina ja niiden koodi on yhdessä otsikkotiedostossa ja tarkoitus olisi modularisoida nuo hieman siistimpään ulkoasuun. Ongelmaksi tulee nyt että miten tuo käytännössä toimii

Otetaan esimerkiksi vaikka main.cpp ja PVM-luokka.
Laitan PVM-luokan määrittelyt siis PVM.hpp tiedostoon ja itse koodisätökset PVM.cpp tiedostoon.

Nyt kääntäjä valittaa PVM.cpp tiedoston koodista ettei sitä ole määritelty missään. Mistä ko. mahtaa johtua?

Olen sisällyttänyt PVM.hpp:n pääohjelmassa ja sisällyttänyt PVM.cpp:n PVM.hpp:ssä. Kokeilin vielä sisällyttää PVM.cpp:ssä tuon .hpp:n mutta se ei auttanut asiaani.

Metabolix [12.03.2006 12:50:38]

#

Cpp-tiedostoja ei liitetä minnekään, ne käännetään itsekseen. Linkkeri hoitaa sitten hommansa. Luokan cpp-tiedostoon pitää includella liittää luokan otsikko, ja sama otsikko pitää liittää myös niihin tiedostoihin, joissa luokkaa käytetään.

Zmyrgel [12.03.2006 13:45:22]

#

Kokeilin laittaa kuten yllä eli pääohjelmaan ja PVM.cpp:hen sisällytetään PVM.hpp mutta nyt kääntäjä antaa linkkeri virhettä.

[Linker error] undefined reference to `PVM::PVM(int, int, int)'
[Linker error] undefined reference to `PVM::~PVM()'
[Linker error] undefined reference to `PVM::~PVM()'
ld returned 1 exit status
C:\Documents and Settings\Zmyrgel\Työpöytä\tui\Makefile.win [Build Error]  [Olio1.exe] Error 1

Metabolix [12.03.2006 14:04:50]

#

Eli et ole kääntänyt ja linkittänyt sitä toista cpp-tiedostoa. Dev-Cpp:ssä lisää se projektiisi, niin sen pitäisi automaattisesti kääntyä mukana.

Zmyrgel [13.03.2006 12:39:58]

#

Jep, kokeilin tuota mutta nyt se valittaa kaikenlaista kivaa tuosta PVM.cpp:stä kuten "cout" tuntematon komento (namespace std käytössä) ja luokalle ei ole määritelty pp tietotyyppiä vaikka se löytyy PVM.hpp:stä. Kaiken pitäisi noista olla kunnossa kun kaikki hommat on määritelty ja sisälletytte mutta ei vain ota toimiakseen.

Vielä jotain mikä tässä voi mättää. Joku simppelijuttu tässä on kuitenkin mitä ei itse osaa katsoa.


EDIT: Vika löytyi, oli funktiot menossa ristiin ja nyt homma toimii kuten pitääkin.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta