| 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 | 
UNIX V3.2D-2 & V4.0B
C++ V5.5-004
  The sample program below enables me to ask you two questions.
  1.  About the -ptv option:
      The program properly builds. When the option -ptv is added, it, however, 
      generates, as shown, a message refering to a symbol which cannot be 
      translated. Note that the symbol differs given the version of the o.s.
      What does this means ? Is it an error ?
      Note that the executable is generated and runs properly.
  2.  About compiler directives:
      If no instanciation directive is given, the build fails, complaining 
      about an invalid declaration. Looking to the generated file where the 
      problem occurs, it appears that the macro definition (#define) specified 
      in the source, is not passed to this file. But #include instructions are. 
      Is there a rule ? Which one ?
  Thanks in advance for the information.
  Mich�le.
=========
 vub.cxx
=========
#include <stream.h>
template <class T>
class myClass {
  public:
        void ff();
  };
#define TYPE    int
template <class T>
void myClass<T>::ff()
{
    #include "ff.h"
}
void main()
{
        myClass<double> A;
        A.ff();
}
======
 ff.h
======
TYPE    var     = 5;
T       val     = 6;
cout << var << " " << val << " in ff()" << endl;
===================
 -ptv build output
===================
      On UNIX V3.2D-2:
      $ cxx -define_templates -o vub vub.cxx -ptv
	Writable_repository: ./cxx_repository
	Repository_list: ./cxx_repository
	prelinker invoked
	Line read from pipe: ldr_process_context  [ref: /usr/shlib/libc.so]
	Couldn't translate symbol: ldr_process_context
      On UNIX V4.0B:
      $ cxx -define_templates -o vub vub.cxx -ptv
	Writable_repository: ./cxx_repository
	Repository_list: ./cxx_repository
	prelinker invoked
	Line read from pipe: _end       [ref:  /usr/shlib/libc.so]
	Couldn't translate symbol: _end
=================================
 cxx without instanciation error
=================================
	cxx: Error: ./ff.h, line 8: Invalid declaration.
	TYPE    var     = 5;
	--------^
	cxx: Error: ./cxx_repository/myClass__Td.cxx, line 3: Invalid 
	declaration.
	typedef myClass<double > __dummy_;
	---------------^
	ld:
	Unresolved:
	myClass<double>::ff(void)
    ./cxx_repository/myClass__Td.cxx
    ================================
#include <stream.h>
#include "ff.h"
typedef myClass<double > __dummy_;
| T.R | Title | User | Personal Name | Date | Lines | 
|---|---|---|---|---|---|
| 3485.1 | Possibly because -ptv and -define_templates options are combined? | BEGIN::ROTITHOR | Tue Mar 11 1997 11:11 | 13 | |
| slab.zko.dec.com> cxx -define_templates -o vub vub.cxx slab.zko.dec.com> vub 5 6 in ff() slab.zko.dec.com> cxx -V cxx (cxx) DEC C++ V5.5-004 on Digital UNIX (Alpha) -define_templates looks like a more appropriate option for the structure of this code. If you want to sepcify auto-instantiation, the template defn can be moved to a separate header file. The _end symbol translation seems to be a warning (why?) and does not appear if verbose mode is not specified (-pt instead of -ptv) | |||||
| 3485.2 | more about -ptv | BACHUS::SABLON | Mich�le Sablon, TP/IM Support Belgium 856-7238 | Tue Mar 11 1997 11:53 | 8 | 
| .1 The same behaviour when using another option forcing instanciation. E.g. -tlocal, -tused. And also after reorganizing the program into main, template.cxx and template.hxx with no option specified out of -ptv. Mich�le. | |||||
| 3485.3 | ignore the "Couldn't translate symbol:" messages | DECC::SEIGEL | Tue Mar 11 1997 12:14 | 10 | |
| You can ignore messages like the following: Line read from pipe: _end [ref: /usr/shlib/libc.so] Couldn't translate symbol: _end -ptv was originally written to aid the developers of the template support. Hence, it can cause lots of messages to be generated that do not make sense to C++ users. Harold | |||||
| 3485.4 | why #include and not #define ? | BACHUS::SABLON | Mich�le Sablon, TP/IM Support Belgium 856-7238 | Thu Mar 13 1997 04:49 | 7 | 
|     Thanks for your answers about -ptv.
    Anybody about why the #include instructions are passed to the generated 
    sources in the repository and not the #define instructions ?
    Thanks in advance,
Mich�le.
 | |||||