[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