I think that you need to deference the pointer (replace mol by *mol):

 

  for( auto & mol: prods ) {

    std::cout << RDKit::MolToSmiles(*mol) << std::endl;

  }

 

As indicated by this message:

 

opt/rdkit-Release_2022_09_2/Code/GraphMol/SmilesParse/SmilesWrite.h:116:45: 
note:   no known conversion for argument 1 from ‘std::vector<boost::shared_pt

r<RDKit::ROMol> >’ to ‘const RDKit::ROMol&’

 

Cheers,
Gareth

 

From: Jarod Younker <jarod_youn...@hotmail.com> 
Sent: Monday, December 5, 2022 7:32 AM
To: rdkit-discuss@lists.sourceforge.net
Subject: [Rdkit-discuss] std::vector<boost::shared_ptr<RDKit::ROMol> > object 
(RxnSmarts)

 

 I’m new to C++ RDKit.  How do I perform functions on elements of 
std::vector<boost::shared_ptr<RDKit::ROMol> > object?  I’m struggle to unpack 
it (see highlighted sections below).  

 

P.S. This is simply cut and pasted from the documentation with on addition: 
MolToSmiles()

 

Thank you, Jarod

 

 std::string smi="[O:1]>>[N:1]";

  RDKit::ChemicalReaction *rxn = RDKit::RxnSmartsToChemicalReaction(smi);

  rxn->initReactantMatchers();

  RDKit::MOL_SPTR_VECT reacts;

  reacts.clear();

  smi = "OCO";

  RDKit::ROMol *mol = RDKit::SmilesToMol(smi);

  reacts.push_back(RDKit::ROMOL_SPTR(mol));

  std::vector<RDKit::MOL_SPTR_VECT> prods;

  prods = rxn->runReactants(reacts);

  // here prods has two entries, because there are two Os in the

  // reactant.

  for( auto & mol: prods ) {

    std::cout << RDKit::MolToSmiles(mol) << std::endl;

  }

 

  reacts[0]->getAtomWithIdx(0)->setProp(RDKit::common_properties::_protected,1);

  prods = rxn->runReactants(reacts);

  // here prods only has one entry, the reaction at atom 0

  // has been blocked by the _protected property

 

test.cpp: In function ‘int main()’:

test.cpp:37:36: error: no matching function for call to 
‘MolToSmiles(std::vector<boost::shared_ptr<RDKit::ROMol> >&)’

   37 |     std::cout << RDKit::MolToSmiles(mol) << std::endl;

      |                  ~~~~~~~~~~~~~~~~~~^~~~~

In file included from test.cpp:5:

/opt/rdkit-Release_2022_09_2/Code/GraphMol/SmilesParse/SmilesWrite.h:96:38: 
note: candidate: ‘std::string RDKit::MolToSmiles(const ROMol&, const SmilesWri

teParams&)’

   96 | RDKIT_SMILESPARSE_EXPORT std::string MolToSmiles(

      |                                      ^~~~~~~~~~~

/opt/rdkit-Release_2022_09_2/Code/GraphMol/SmilesParse/SmilesWrite.h:96:38: 
note:   candidate expects 2 arguments, 1 provided

/opt/rdkit-Release_2022_09_2/Code/GraphMol/SmilesParse/SmilesWrite.h:116:20: 
note: candidate: ‘std::string RDKit::MolToSmiles(const ROMol&, bool, bool, in

t, bool, bool, bool, bool)’

  116 | inline std::string MolToSmiles(const ROMol &mol, bool doIsomericSmiles 
= true,

      |                    ^~~~~~~~~~~

/opt/rdkit-Release_2022_09_2/Code/GraphMol/SmilesParse/SmilesWrite.h:116:45: 
note:   no known conversion for argument 1 from ‘std::vector<boost::shared_pt

r<RDKit::ROMol> >’ to ‘const RDKit::ROMol&’

  116 | inline std::string MolToSmiles(const ROMol &mol, bool doIsomericSmiles 
= true,

 

Sent from my iPhone

_______________________________________________
Rdkit-discuss mailing list
Rdkit-discuss@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/rdkit-discuss

Reply via email to