boost::shared_ptrBase to boost::shared_ptrDerived

Started by
2 comments, last by dalleboy 15 years, 8 months ago
Is something like this possible? (I'm leaning towards not, but I just thought I'd make sure...) The code:

class Base {
};
class Derived : public Base {
};

int main(int argc, char* argv[]) {
	boost::shared_ptr<Base> b(new Derived);
	
	boost::shared_ptr<Derived> d(b); // line 25
}


With compiler errors for it:

C:\code_utils\boost-1_34_1\boost\shared_ptr.hpp||In constructor `boost::shared_ptr<T>::shared_ptr(const boost::shared_ptr<Y>&) [with Y = Base, T = Derived]':|
C:\Documents and Settings\Matthew\My Documents\My C++ Projects\testing\toroidalarray\toroidalarray.cpp|25|instantiated from here|
C:\code_utils\boost-1_34_1\boost\shared_ptr.hpp|195|error: invalid conversion from `Base* const' to `Derived*'|
||=== Build finished: 1 errors, 0 warnings ===|


Advertisement
Go here and search for "dynamic_pointer_cast".
Ah, thanks Red Ant. Didn't spot that.
Why not the other way around?

class Base {};class Derived : public Base {};int main(int argc, char* argv[]) {	boost::shared_ptr<Derived> d(new Derived);		boost::shared_ptr<Base> b(d);}


Works like a charm...
Arguing on the internet is like running in the Special Olympics: Even if you win, you're still retarded.[How To Ask Questions|STL Programmer's Guide|Bjarne FAQ|C++ FAQ Lite|C++ Reference|MSDN]

This topic is closed to new replies.

Advertisement