5 Mar 2012 05:21
Cannot link C++ template ; pls help ...
Hello, I am trying to use templates in my C++ application, but it looks like the definition of the template instance fails to be found in case it is defined in a different module. I read the IBM docs regarding templates and their suggestions to use either TEMPLATE(*TEMPINC) or TMPLREG(*DFT ) but none works. Here is the example , containing three objects : H/IONUT : header declaring one normal class , Order, and one template class , Record<T> ; please not Record's public constructor is defined outside this object QCSRC/IONUT : defines Record's public constructor QCSRC/IONUTMAIN : main ; instantiates an object or type Record<Order> When compiling, both IONUT and IONUTMAIN *MODULEs compile successfully; when binding them into the IONUT *PGM, however, the error comes like this : Definition not found for symbol '__ct__Q2_5ionut6RecordXTQ2_5ionut5Order_Fv' This suggests to me that the linker cannot find Record's constructor which is defined in QCSRC/IONUT ; if , however, I define it inline, in H/IONUT , it works fine. Both *MODULEs and the program are creates as follows : CRTCPPMOD MODULE($IRB1201/IONUTMAIN) SRCFILE($IRB1201/QCSRC) SRCMBR(IONUTMAIN) OUTPUT(*PRINT) DBGVIEW(*SOURCE) TEMPLATE(*TEMPINC) CRTCPPMOD MODULE($IRB1201/IONUT) SRCFILE($IRB1201/QCSRC) SRCMBR(IONUT) OUTPUT(*PRINT) DBGVIEW(*SOURCE) TEMPLATE(*TEMPINC)(Continue reading)
RSS Feed