At 2:56 AM +0000 12/9/01, rz0 wrote:
#include <iostream> #include
class A { public: virtual void func1() { std::cout << "A::func1" << std::endl; } };
class B : public A { public: void func1() { std::cout << "B::func1" << std::endl; } void funcB() { std::cout << "B::funcB" << std::endl; } };
class C : public A { public: void func1() { std::cout << "C::func1" << std::endl; } void funcC() { std::cout << "C::funcB" << std::endl; } };
class Holder { boost::shared_ptr<A> aptr; public: void setclass(boost::shared_ptr<A> a) { aptr = a; } void callfunc() { aptr->func1(); } };
int main() {
Holder holder;
boost::shared_ptr<B> b(new B()); boost::shared_ptr<C> c(new C());
holder.setclass(b); //<------- holder.setclass(c); //<-------
holder.callfunc();
return 0; }
VC++ 6.0 flags the above lines with a conversion error.
Is there any way to resolve this?
Can you just define b and c as boost::shared_ptr<A>? -- Jon Kalb Kalb@LibertySoft.com