I have a function that accepts a shared pointer of type Base and then std::dynamic_pointer_cast to a derived type. However, the derived pointer is a NULL and I can't see why. I have made sure to include a virtual destructor in my base class. I do not want to use a static cast as this cannot guarantee that my derived member variables and functions are preserved?
The code is as follows:
Base Class:
class Base { public: mType get_type() { return msg_type; } void set_type(mType type) { msg_type = type; } virtual ~cMsg() = default; protected: mType msg_type; message msg; }; Derived Class:
class Derived : public Base { public: void set_i(int j) { i = j; } int get_i() { return i; } private: int i; }; Function performing cast:
void callback(std::shared_ptr<Base> msg_received) { std::cout<< "Callback called\n"; auto real_msg = std::dynamic_pointer_cast<Derived>(msg_received); if (real_msg != NULL) { std::cout << "i value is: " << real_msg->get_i() << "\n"; } } Function creating the Derived object and calling the function:
int main() { Derived test_msg; test_msg.set_i(1); test_msg.set_type(mSystem::TEST_MSG); std::shared_ptr<Base> msg_ptr = std::make_shared<Base>(test_msg); callback(msg_ptr); return 0; } Any help would be appreciated.
Edit: Corrected typo
msg_ptrwas constructed as aBase, not aDerived.msg_ptrtocallback()and please clean up your example to be minimal, complete, and verifiable.