给出以下代码:
@H_502_2@#include <boost/noncopyable.hpp>
enum Error { ERR_OK=0 };
struct Filter : private boost::noncopyable
{
Filter() {}
virtual ~Filter() {}
virtual int filter(int* data) const = 0;
};
struct SpecialFilter : public Filter,private boost::noncopyable
{
inline SpecialFilter(unsigned int min,unsigned int max) : min(min),max(max) {}
virtual ~SpecialFilter() {}
virtual int filter(int* data) const
{
// ...
return ERR_OK;
}
unsigned int min;
unsigned int max;
};
struct AClass
{
AClass() {}
AClass(const AClass& other) {}
~AClass() {}
int specialFilter(int channel,int minThreshold,int maxThreshold)
{
// ...
return filter(channel,SpecialFilter(123,321));
}
int filter(int channel,const Filter& filter)
{
// ...
return ERR_OK;
}
};
我的编译器(GCC 4.2)抱怨:
@H_502_2@- warning: direct base ‘boost::noncopyable_::noncopyable’ inaccessible in ‘SpecialFilter’ due to ambiguity - noncopyable.hpp: In copy constructor ‘Filter::Filter(const Filter&)’: - noncopyable.hpp:27: error: ‘boost::noncopyable_::noncopyable::noncopyable(const boost::noncopyable_::noncopyable&)’ is private - synthezised method first required here: [return filter(channel,321));]