samedi 24 mars 2018

How to pass unique_ptr object as argument to a class that is a library

I read all the questions and answers related to passing unique_ptr as argument to a class constructor and those answers worked for classes within the exe. But here im trying to pass an unique_ptr object to a class constructor that is pre-compiled as static library.

This class in the library looks something like this,

// Class declaration
class TScreen
{
   private:
      std::unique_ptr<TProcess> m_process;
   public:
      __fastcall TScreen(int a, std::unique_ptr<TProcess> i_process);
};    

// The constructor definition
__fastcall TScreen::TScreen(int a, std::unique_ptr<TProcess> i_process): 
m_process(std::move(i_process)) 
{ 
}

I will be trying to instantiate the class TScreen in the exe like this,

void TScreen_Main::CallScreen()
{
   std::unique_ptr<TProcess> objprocess (new TProcess());
   std::unique_ptr<TScreen> objscreen (new TScreen(0, std::move(objprocess)));
}

I compiled the library and imported it to the exe. When i compile the exe, it gives me a link error like this,

[ilink32 Error] Error: Unresolved external '__fastcall TScreen::TScreen(int, std::unique_ptr<TProcess, std::default_delete<TProcess> >)' referenced from TSCREEN_MAIN.OBJ
[ilink32 Error] Error: Unable to perform link

I tried the same with boost::shared_ptr as well and it gives me the same error. But it works fine with raw pointers, but not with smart pointers and i cannot figure out why?

Thanks in advance.

Aucun commentaire:

Enregistrer un commentaire