From bb6cf7c00bcc55cd55fd28f86ce6add355badc52 Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Tue, 15 Feb 2011 11:39:38 -0500 Subject: [PATCH] avoid method resolution problem from diamond inheritance Serializable -> SerializableArray Serializable -> PVField SerializableArray -> PVArray PVField -> PVArray Thus for PVArray the members of SerializeSerializable are reachable by two paths. This means that The vtable for PVArray has two seperate entries for serialize. Correct resolution is to use virtual inheritance to avoid the ambiguity. --- pvDataApp/misc/serialize.h | 2 +- pvDataApp/pv/pvData.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pvDataApp/misc/serialize.h b/pvDataApp/misc/serialize.h index effc763..7fa7559 100644 --- a/pvDataApp/misc/serialize.h +++ b/pvDataApp/misc/serialize.h @@ -44,7 +44,7 @@ namespace epics { namespace pvData { }; - class SerializableArray : public Serializable { + class SerializableArray : virtual public Serializable { public: virtual void serialize(ByteBuffer *buffer, SerializableControl *flusher, int offset, int count) = 0; diff --git a/pvDataApp/pv/pvData.h b/pvDataApp/pv/pvData.h index 22bade9..639cbc8 100644 --- a/pvDataApp/pv/pvData.h +++ b/pvDataApp/pv/pvData.h @@ -58,7 +58,7 @@ public: class PVField : public Requester, - public Serializable, + virtual public Serializable, private NoDefaultMethods { public: