Operating System - OpenVMS
cancel
Showing results for 
Search instead for 
Did you mean: 

C++ problem with %CXX-E-INCOMPLETETYP

 
SOLVED
Go to solution
ptrskg
Frequent Advisor

C++ problem with %CXX-E-INCOMPLETETYP

Hi,

I'm fairly new to C++ and have problem with the code below, I get an error saying %CXX-E-INCOMPLETETYP when I compile. The complete error message follows at the end.

The compiler version says "HP C++ V7.2-018 on OpenVMS IA64 V8.3-1H1" and the command is $cxx prefs.cpp/def=(__USE_STD_IOSTREAM).

The code compiles OK in "Visual Studio" and on Linux.

My problem seems to bee that I'm trying to refer my own class in the member map m_Groups. Can this be a restriction in the compiler or have I missed anything here? Can this construction be made otherwise to work with the OpenVMS c++ compiler?

Thanks for any help.

Peter

prefs.cpp

#include "prefs.h"

Prefs::Prefs()
{
}

Prefs::Prefs(const string &name, const string &value)
{
   AddSimpleValue(name, value);
}

Prefs::~Prefs()
{
   m_Values.clear();
   m_Groups.clear();
}

void Prefs::AddSimpleValue(const string &name, const string &value)
{
   pair<ValueMap::iterator,bool> rc;
   m_Values.insert(ValuePair(name, value));
}

 prefs.h

#ifndef PREFS_H
#define PREFS_H

#include <string>
#include <map>

using namespace std;

class Prefs
{
   typedef map <string, string> ValueMap;
   typedef pair<string, string> ValuePair;
   typedef map <string, Prefs> GroupMap;
   typedef pair<string, Prefs> GroupPair;

   public:
      Prefs();
      Prefs(const string &name, const string &value);
      virtual ~Prefs();

   private:
      void AddSimpleValue(const string &name, const string &value);

      ValueMap m_Values;
      ValueMap::iterator m_ValueItr;

      GroupMap m_Groups;
      GroupMap::iterator m_GroupItr;
};

#endif

 Error message

    second_type second;
................^
%CXX-E-INCOMPLETETYP, incomplete type is not allowed
          detected during:
            instantiation of class "std::pair<_TypeT, _TypeU> [with
                      _TypeT=const std::string, _TypeU=Prefs]" at line 117 of
                      "SYS$COMMON:[SYSLIB]CXXL$ANSI_DEF.TLB;1(RW_INTERNAL_TREE.
                      H)"
            instantiation of class "__rw::__rw_rb_tree_node<_Alloc, _Val,
                      _Key, _KeyOf> [with _Alloc=std::map<std::string, Prefs,
                      std::less<std::string>, std::allocator<std::pair<const
                      std::string, Prefs>>>::allocator_type,
                      _Val=std::map<std::string, Prefs,
                      std::less<std::string>, std::allocator<std::pair<const
                      std::string, Prefs>>>::value_type,
                      _Key=std::map<std::string, Prefs,
                      std::less<std::string>, std::allocator<std::pair<const
                      std::string, Prefs>>>::key_type,
                      _KeyOf=__rw::__select1st<std::map<std::string, Prefs,
                      std::less<std::string>, std::allocator<std::pair<const
                      std::string, Prefs>>>::value_type, std::map<std::string,
                      Prefs, std::less<std::string>,
                      std::allocator<std::pair<const std::string,
                      Prefs>>>::key_type>]" at line 292 of
                      "SYS$COMMON:[SYSLIB]CXXL$ANSI_DEF.TLB;1(RW_INTERNAL_TREE.
                      H)"
            instantiation of class "__rw::__rb_tree<_Key, _Val, _KeyOf, _Comp,
                      _Alloc> [with _Key=std::map<std::string, Prefs,
                      std::less<std::string>, std::allocator<std::pair<const
                      std::string, Prefs>>>::key_type,
                      _Val=std::map<std::string, Prefs,
                      std::less<std::string>, std::allocator<std::pair<const
                      std::string, Prefs>>>::value_type,
                      _KeyOf=__rw::__select1st<std::map<std::string, Prefs,
                      std::less<std::string>, std::allocator<std::pair<const
                      std::string, Prefs>>>::value_type, std::map<std::string,
                      Prefs, std::less<std::string>,
                      std::allocator<std::pair<const std::string,
                      Prefs>>>::key_type>, _Comp=std::map<std::string, Prefs,
                      std::less<std::string>, std::allocator<std::pair<const
                      std::string, Prefs>>>::key_compare,
                      _Alloc=std::map<std::string, Prefs,
                      std::less<std::string>, std::allocator<std::pair<const
                      std::string, Prefs>>>::allocator_type]" at line 120 of
                      "SYS$COMMON:[SYSLIB]CXXL$ANSI_DEF.TLB;1(MAP.)"
            instantiation of class "std::map<_Key, _TypeT, _Compare,
                      _Allocator> [with _Key=std::string, _TypeT=Prefs,
                      _Compare=std::less<std::string>,
                      _Allocator=std::allocator<std::pair<const std::string,
                      Prefs>>]" at line 27 of "SPPUSR_ROOT:[PSK]prefs.h;31"
at line number 85 in module RW_INTERNAL_PAIR.H of text library SYS$COMMON:[SYSLIB]CXXL$ANS
I_DEF.TLB;1

%CXX-I-MESSAGE, 1 error detected in the compilation of "SPPUSR_ROOT:[PSK]prefs.cpp;11".

 

10 REPLIES 10
Jansen_8
Regular Advisor

Re: C++ problem with %CXX-E-INCOMPLETETYP

I smell a BUG.

 

I compiled it with HP C++ V7.3-009 for OpenVMS Alpha V8.4 and found no problems. I do not have a Itanium to test.)

 

Is the 7.2 the latest compiler for Itanium? if not maybe an upgrade helps.

 

 

                              Jouk

x2084
Trusted Contributor

Re: C++ problem with %CXX-E-INCOMPLETETYP

Updating may change this,  but whether there is a bug or not depends on how the map template should be implemented in STL. It's not a compiler bug. The type definition and use of  GroupMap is within the definition of Prefs, hence Prefs is incomplete.

Highlighted
Steven Schweda
Honored Contributor

Re: C++ problem with %CXX-E-INCOMPLETETYP

   Looks about the same here, with:

IT $ cxx /version
HP C++ V7.3-023 on OpenVMS IA64 V8.3-1H1

so at least one compiler upgrade may not help much.  No such complaint
from:

alp $ cxx /ver
HP C++ V7.3-009 for OpenVMS Alpha V8.3   

   Generally speaking, when a compiler complains about a system header
file, ("at line number 85 in module RW_INTERNAL_PAIR.H of text library
SYS$COMMON:[SYSLIB]CXXL$ANSI_DEF.TLB;1"), one is tempted to blame the
folks who supplied the compiler.

Hoff
Honored Contributor

Re: C++ problem with %CXX-E-INCOMPLETETYP

FWIW and based on various published statements from HP, the HP C++ compiler for OpenVMS I64 is based on the Intel C++ compiler on Itanium. 

 

Regardless, contact the HP support center, and see what they think about this error and about this header.

 

Dennis Handly
Acclaimed Contributor

Re: C++ problem with %CXX-E-INCOMPLETETYP

>Can this construct be made otherwise to work with the OpenVMS c++ compiler?

 

You could use a pointer to that container.

 

>the HP C++ compiler for OpenVMS I64 is based on the Intel C++ compiler on Itanium.

 

But the important part is that it is EDG and RW based.

 

This fails on HP-UX with aCC6 with the same error.  But works fine under g++.

So this an illegal program that just depends on the quality of implementation of the STL.

(I suppose it could be that g++ doesn't do error checking of the point of instantiation correctly.)

ptrskg
Frequent Advisor

Re: C++ problem with %CXX-E-INCOMPLETETYP

Thanks all for the answers.

 

I've just installed HP C++ V7.4-003 and tested but with the same bad result so I will report this to HP. Hopefully they will fix it and until then I go for a pointer solution.

But it's strange that it works on the Alpha....

 

Thanks again

Peter

ptrskg
Frequent Advisor
Solution

Re: C++ problem with %CXX-E-INCOMPLETETYP

Hi,

I have been in contact with HP support and they answered with returning mail that this is a known problem and they supplied me with a fix that seems to work.

So, I close this case and thanks once again.

Peter

Steven Schweda
Honored Contributor

Re: C++ problem with %CXX-E-INCOMPLETETYP


[...] they supplied me with a fix that seems to work. [...]

   Describe "a fix"?  New header file(s)?  New compiler?  Something super-secret?

ptrskg
Frequent Advisor

Re: C++ problem with %CXX-E-INCOMPLETETYP


@Steven Schweda wrote:

   Describe "a fix"?  New header file(s)?  New compiler?  Something super-secret?


HP sent me a new CXXL$ANSI_DEF.TLB but I don't know which h-files they have changed.