g++ “parce que la suite de fonctions virtuelles sont de la pure” avec la classe de base abstraite

Voici mon exemple de code qui génère l'erreur:

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;

il semble "SortedContainerImpl" n'a pas fonctionné alors que "ContainerImpl" est très bien.

g++ se plaint:

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)

Je inheret SortedContainerImpl de ContainerImpl afin de pouvoir les réutiliser get_size() et get(int)

Je ne suis pas familier avec le c++, Quelle est la nature de ce problème et Comment puis-je résoudre ce problème?

Merci à tous.

OriginalL'auteur tdihp | 2012-09-27