"[a]-GaSt" wrote:
> 
> help...
> aku lagi bikin program OOP dengan c++, pake template.
> trus file template itu aku pisahin dengan program utama
> dan file objek lain (yang juga make objek bertemplate dari file
> yang pertama). make berhasil... tidak ada masalah apa-apa
> kecuali pas mo nge-link semua *.o jadi binary-nya.
> 

unresolved symbols? saya juga dapet masalah yg. sama. :)

setahu saya, at least di g++ < 3.0 dan di MSVC, semua definisi dari
class/fungsi template harus visible pada saat fungsi itu dipanggil
(jadi nggak cuman deklarasinya aja). Jadi solusinya, file implementasi
dari template itu (.cpp) harus di include di headernya.

Misalnya deklarasi class ada di file myclass.h dan implementasi ada di
file myclass.cpp, maka file myclass.h harus menginclude file
myclass.cpp. Tentu saja di myclass.cpp nggak perlu lagi ada include
myclass.h, karena kalo nggak bisa rekursif.

> udah nyoba nambahin #pragma (tapi juga sebetulnya ngga' tau
> cara yang bener gimana). ada yang bisa ngasih pencerahan:
> 1. pedoman pemisahan source code. apa caraku sudah benar?
>    eg: 2 object files dan 1 main. salah satu dari object file
>    adalah container (object ber-template). 2 file sisanya
>    menggunakan container dari object pertama. setiap object
>    file aku pisahin file implementasi (.cpp) dan file
>    interfacenya (.h)

kayaknya cara pemisahan udah bener (saya juga gitu sih soalnya :)).
karena cara yg. begitu cukup fleksibel. Untuk kompiler yg. bisa
menginstansiasi template pada saat link time (personally saya nggak
pernah make compiler seperti ini), maka cara include-nya ya seperti
biasa: file myclass.cpp menginclude file myclass.h. Untuk kebanyakan
kompiler2 yg lain, yg. menginstansiasi template pada saat kompile
time, kebalikannya. Cara mana yg. mau dipake, ditentuin pake #ifdef.

> 2. ada parameter khusus untuk make, supaya bisa bisa menyatukan
>    dan membuat objek yang bersesuaian dari kontainernya?
>    aku udah coba --extern dllsb. tapi masih belum berhasil.

saya nggak tau. Setahu saya nggak ada.

> 3. cara menempatkan #pragma?
>    aku tempatkan seperti biasa saja:
>    #pragma interface ditaruh di obj1.h dan obj2.h.
>    #pragma implementation di obj1.cpp dan obj2.cpp
> 

setahu saya di gcc nggak pengaruh (untuk template).
anyway, lihat aja sendiri: info gcc -> C++ extesntions -> Template
instantiation
bagus juga liat di program2 yg template heavy, macam STLport.

-- 
cheers,
Bennylp

-- 
Utk berhenti langganan, kirim email ke [EMAIL PROTECTED]
Informasi arsip di http://www.linux.or.id/milis.php3

Kirim email ke