
Hello I have the following scenario: #include <iostream> #include <boost/smart_ptr.hpp> 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? Thanks very much in advance.