[vdr] compiler error with streamdev plugin
Udo Richter
udo_richter at gmx.de
Wed Sep 21 22:15:35 CEST 2005
Dominique Dumont wrote:
> I'm trying to compile Sascha Volkenandt's streamdev plugin and I have
> the following error:
>
> g++ -W -Woverloaded-virtual -O2 -c -D_GNU_SOURCE -DHAVE_AUTOPID -I../../../include -I../../../../DVB/include -I. -o streamdev-client.o streamdev-client.c
> ./tools/list.h:93: error: declaration of 'operator+=' as non-function
> ./tools/list.h:93: error: expected ';' before '<' token
>
> Here's one of the problematic line:
>
> friend cTBList<T> &operator+= <> (cTBList<T> &list1, const cTBList<T> &list2);
This is not latest CVS streamdev, it must be some older version.
Anyway, this is a GCC-4 compatibility issue. GCC4 follows the ISO C++
standard very closely, while GCC3 allowed some non-standard things to
pass through.
In this case: A friend declaration no longer is a forward declaration,
so these operators have to be forward-declared.
The following is from a patch for mplayercluster, that uses a variant of
clist:
// ANSI/ISO C++ and GCC4 require template friend functions to be
forward-declared...
template <class T> class cTBList;
template <class T> inline cTBList<T> &operator+= (cTBList<T> &list1,
const cTBList<T> &list2);
template <class T> inline cTBList<T> &operator+= (cTBList<T> &list,
const T &element);
template <class T> inline cTBList<T> operator+ (const cTBList<T> &list1,
const cTBList<T> &list2);
template <class T> inline cTBList<T> operator+ (const T &element, const
cTBList<T> &list);
template <class T> inline cTBList<T> operator+ (const cTBList<T> &list,
const T &element);
Put it right before the template <class T> class cTBList declaration. It
might need some modifications, depends on your clist.h.
Cheers,
Udo
More information about the vdr
mailing list