Re: multimap and abstract class
This is a MIME GnuPG-signed message. If you see this text, it means that
your E-mail or Usenet software does not support MIME signed messages.
The Internet standard for MIME PGP messages, RFC 2015, was published in 1996.
To open this message correctly you will need to install E-mail or Usenet
software that supports modern Internet standards.
--=_mimegpg-commodore.email-scan.com-15888-1250806642-0004
Content-Type: text/plain; format=flowed; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline
Barry writes:
On 20 Aug, 13:12, Sam <s...@email-scan.com> wrote:
Barry writes:
Hi,
I have an abstract class called "Event" and a number of classes whic=
h
inherit from it, including "NoteOn" and "NoteOff".
I am now attempting to create a multimap called EventList, as follow=
s
-
#ifndef EVENT_LIST_H
#include <map>
#include "Event.h"
class EventList : public std::multimap<double,Event>
{
public:
EventList(void);
virtual ~EventList(void);
};
#endif
#ifndef EVENT_H
class Event
{
public:
Event(void);
virtual void dummy() = 0;
virtual ~Event(void);
};
#endif
but this isn't allowed according to my compiler because 'Event' :
cannot instantiate abstract class.
I don't understand why I get this fail since I haven't even created =
a
EventList object yet.
Because the compiler evaluates the template definition, and finds out =
that
some of the template functions end up instantiating an abstract class,
which, of course, is an error.
application_pgp-signature_part
< 1KVisaH=C3=A4mta
Thanks for the reply. I wish for my EventList class to store objects
of type NoteOn and NoteOff - not Event objects (which is abstract
anyway). But does that mean that I will have to make Event a non-
abstract class in order to create a multimap containing NoteOn and
NoteOff objects?
No. It means that if a multimap contains an Event, it can only contain an
Event, not any arbitrary subclass of Event. Simpler example:
class A {
public:
int a;
};
class B : public A {
public:
int b;
};
std::list<A> alist;
alist contains A objects. If you try to add a B object to alist, only its =
A
superclass gets added to the list:
B binstance;
binstance.a=1;
binstance.b=2;
alist.push_back(binstance);
Your alist gets an instance of A, not B.
Same thing with multimap.
--=_mimegpg-commodore.email-scan.com-15888-1250806642-0004
Content-Type: application/pgp-signature
Content-Transfer-Encoding: 7bit
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
iEYEABECAAYFAkqNy3IACgkQx9p3GYHlUOKjkgCdElDX9oE2obQmTe6wkU2nSH61
9EEAn3LUvVd0jBvdQGfcy1LgLZYIu1GM
=332B
-----END PGP SIGNATURE-----
--=_mimegpg-commodore.email-scan.com-15888-1250806642-0004--