"[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
