title: Inaccessible object when compiling code
body: <p>I want to compile the <a href="http://www.rigi.cs.uvic.ca" rel="nofollow">Rigi</a> source code but I get some error while compiling:</p>
  
  <pre><code>adt/object.h: At global scope:
  adt/object.h:35:18: error: ‘class RigiObject RigiObject::RigiObject’ is inaccessible
  adt/chararray.h:51:13: error: within this context
  make: *** [cl_arcflags.o] Error 1
  </code></pre>
  
  <p>Here our two files.
  <strong>object.h</strong>:</p>
  
  <pre><code>#ifndef OBJECTH
  #define OBJECTH 1
  
  #include &lt;stdio.h&gt;
  #ifndef STREAM_H
  #include &lt;iostream&gt;
  #endif
  #ifndef __STRING_H
  #include &lt;string.h&gt;
  #endif
  #ifndef __STDLIB_H
  #include &lt;stdlib.h&gt;
  #endif
  #ifndef _CCHEADER_H_
  #include "CCheader.h"
  #endif
  
  extern char* indent_line(int);
  
  class RigiObject;
  typedef RigiObject* ObjectPtr;
  
  #define Oberr(a) fprintf(stderr,"ERROR :: Generic Object Routine Called :: %s\n","a");
  
  class RigiObject {
      public:
      RigiObject() {/*Oberr(RigiObject)*/;}
      ~RigiObject() {/*Oberr(~RigiObject)*/;}  
  
      // Routines that are really described by the Derived Classes
      virtual int Printout(int)  const
        {Oberr(printout); return (int) 0;}
      virtual unsigned int Hash() const  
        {Oberr(hash); return (unsigned int) 0; }
      virtual RigiBool isEqual(void* a) const
        {Oberr(isEqual); a = NIL; 
             (void) abort();
         return (RigiBool) RigiFalse;}  
      virtual void Delete_class(ObjectPtr) 
        {Oberr(delete_type);}
      virtual void* Create_class();
      virtual void* Duplicate_class();
  
  };
  
  #endif
  </code></pre>
  
  <p>and <strong>chararray.h</strong>:</p>
  
  <pre><code>#ifndef CHARARRAYH
  #define CHARARRAYH
  
  #ifndef ARRAYOBIDH
  #include "array.h"
  #endif
  #ifndef CHARTYPEH
  #include "chartype.h"
  #endif
  
  class CharArray;
  typedef CharArray* CharArrayPtr;
  
  class CharArray : public Array {
      int slot;
      public:
     // Routines to initialize and destroy the class.
      CharArray(unsigned int size = CLTN_DEFAULT_CAPACITY);
      CharArray(const CharArray&amp;);
      ~CharArray(); 
  
      // Functions that are Required to Use this Class as an Object
  
          // .... all routines the same as in Class Array.......
  
     // Routines that are required by a Collection class and derived classes
     // of Collections. [See Array Class for these routines.]
  
      virtual unsigned int size() const {return slot;}
  
          // .... all routines the same as in Class Array.......
  
     // Routines specific to this class
      void operator=(const CharArray&amp;);
      RigiBool operator==(const CharArray&amp;) const;
      void Create(char*);
      void Create(char*,int);
      void Create(int, char*);
      void Add(char*);
      void Add(CharType&amp;);
      void Addob(RigiObject&amp; ob)  
          {Array::Add(slot++,&amp;ob);}
      void Append(char*);
      char* Concat(char);
      int FindIndex(char*);
      char* Remove() 
          {return ((CharTypePtr)Array::Remove(--slot))-&gt;string();}
      ObjectPtr Pop()
          {return (Array::Remove(--slot));}
      ObjectPtr Look(int i)
          {return (Array::At(i));}
      void Empty();
      virtual unsigned int Size() const
          {return slot;}
      char* Peek();
      char* At(int);
  };
  
  #endif
  </code></pre>
  
  <p>What's wrong with the code?</p>