| Title: | C++ | 
| Notice: | Read 1.* and use keywords (e.g. SHOW KEY/FULL KIT_CXX_VAX_VMS) | 
| Moderator: | DECCXX::AMARTIN | 
| Created: | Fri Nov 06 1987 | 
| Last Modified: | Thu Jun 05 1997 | 
| Last Successful Update: | Fri Jun 06 1997 | 
| Number of topics: | 3604 | 
| Total number of notes: | 18242 | 
What is CXXL$LSXN7OSTRAMNK10SMNP109JBEU ? The question arises because of
the following program. (Open VMS Alpha 6.2, DEC C++ V5.5-017)
Wolfgang
$ CXX EXA05_MAIN
$ CXXLINK EXA05_MAIN
%LINK-W-NUDFSYMS, 1 undefined symbol:
%LINK-I-UDFSYM,         CXXL$LSXN7OSTRAMNK10SMNP109JBEU
%LINK-W-USEUNDEF, undefined symbol CXXL$LSXN7OSTRAMNK10SMNP109JBEU referenced
in psect $LINK$ offset %X00000060
in module EXA05___C file SYS$USER:[WERNER.TMP.CXX_REPOSITORY]EXA05___C.OBJ;1
$ TYPE EXA05_MAIN.CXX
#include <iostream.h>
#include <iomanip.h>
#include "exa05.h"
int main() {
  exa05<char>   ec('a');
  ec.ToStream(cout);
  return 0;
}
$ TYPE EXA05.H
template <class T>
class exa05<T> {
  private:
    T         m_value;
  public:
              exa05<T>(T value);
    void      ToStream(ostream& os) const;
};
$ TYPE EXA05.CXX
template <class T>
exa05<T>::exa05(T value) {
  m_value = value;
}
template <class T>
void exa05<T>::ToStream(ostream& os) const {
  os << setw(6);  // no linker warning error if replaced with 'os.width(6);' 
  os << m_value;
}
| T.R | Title | User | Personal Name | Date | Lines | 
|---|---|---|---|---|---|
| 3503.1 | DECC::FOLTAN | Wed Mar 19 1997 09:47 | 18 | ||
| 
Yes, I am able to reproduce your problem.
$ cxx/version exa05_main.cxx
DEC C++ V5.5-017 on OpenVMS Alpha V6.2-1H3
$ cxx exa05_main.cxx
$ cxxlink exa05_main.obj
%LINK-W-NUDFSYMS, 1 undefined symbol:
%LINK-I-UDFSYM,         CXXL$LSXN7OSTRAMNK10SMNP109JBEU
%LINK-W-USEUNDEF, undefined symbol CXXL$LSXN7OSTRAMNK10SMNP109JBEU referenced
        in psect $LINK$ offset %X00000060
        in module EXA05___C file GEM_C$:[FOLTAN.WORK.CXX_REPOSITORY]EXA05___C.OB
J;1
I suspect the sybol is coming from the class library.
I will have someone take a look.
Lois
 | |||||
| 3503.2 | shows bug in automatic instantiation, will be fixed in next release of compiler (V5.6) | DECC::J_WARD | Wed Mar 19 1997 10:03 | 23 | |
| This is the unresolved symbol: Unresolved: operator <<(ostream&, const smanip_int&) The problem you have linking is due to a bug in the automatic instantiation mechanism that will be fixed in V5.6 of the compiler (it corresponds to our internal bug database number CXXC_BUGS 3926). It happens because this operator is declared as a friend function in the iomanip header. For now, you can either: 1. use width() instead 2. use manual instantiation, i.e. add the following right before main() in exa05_main.cxx: #ifdef __DECCXX // workaround V5.5 auto instantiation bug #include "exa05.cxx" #pragma define_template exa05<char> #endif | |||||
| 3503.3 | Thanx for the FAST answers | MUNICH::WWERNER | When in doubt, do as the INTs do | Wed Mar 19 1997 10:12 | 0 |