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.
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.
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
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.
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.
Aihe on jo aika vanha, joten et voi enää vastata siihen.