title: g++ "because the following virtual functions are pure" with abstract base class
body: <p>Here is my example code which produces the error:</p>
  
  <pre><code>struct Impl
  {
    int data_size_;
    int find(int var){return 0;}
    int get(int rowid){return 0;}
  };
  
  class Container
  {
  public:
    Container() {}
    virtual ~Container() {}
    virtual int get_size() = 0;
    virtual int get(int rowid) = 0;
  };
  
  
  class SortedContainer : virtual public Container {
  public:
    virtual int find(int var) = 0;
  };
  
  class ContainerImpl : public Container
  {
  protected:
    Impl impl_;
  public:
    int get_size() {return impl_.data_size_;}
    int get(int rowid) {return impl_.get(rowid);}
  };
  
  class SortedContainerImpl
    : public SortedContainer, public ContainerImpl
  {
  private:
    typedef ContainerImpl Base;
  public:
    int find(int var){return Base::impl_.find(var);}
  };
  
  ContainerImpl ci;
  SortedContainerImpl sci;
  </code></pre>
  
  <p>it seems "SortedContainerImpl" went wrong while "ContainerImpl" is fine.</p>
  
  <p>g++ complains:</p>
  
  <pre><code>example_b.cpp:42:21: error: cannot declare variable ‘sci’ to be of abstract type ‘SortedContainerImpl’
  example_b.cpp:32:7: note:   because the following virtual functions are pure within ‘SortedContainerImpl’:
  example_b.cpp:13:15: note:  virtual int Container::get_size()
  example_b.cpp:14:15: note:  virtual int Container::get(int)
  </code></pre>
  
  <p>I inheret SortedContainerImpl from ContainerImpl in order to reuse get_size() and get(int)</p>
  
  <p>I'm not familiar with c++, What's the nature of this problem and How can I fix it?</p>
  
  <p>Thanks all.</p>