Greg,

I figure out the problem. Removing "->get()" can solve the problem.

Here is the updated version.

boost::tie(firstB,lastB) = pCurrentROMol->getEdges();

while(firstB!=lastB)

{

    auto bond = (*pCurrentROMol)[*firstB];

    ...

    sEdgeLabel += ((queryIsBondInRing(bond)) ? "ring|" : "linear|" );

    ...

    ++firstB;

}


The original version was


boost::tie(firstB,lastB) = pCurrentROMol->getEdges();

while(firstB!=lastB)

{

    boost::shared_ptr<Bond> bond = (*pCurrentROMol)[*firstB];

    ...

    sEdgeLabel += ((queryIsBondInRing(bond.get())) ? "ring|" : "linear|" );

    ...

    ++firstB;

}


However, I still have a question. Why "Atom *atom" and "Bond *bond" do not
work? Yes, "auto" solves the problem, but I feel it just covers the
essential issue.


Thanks.

Yingfeng




On Wed, Dec 12, 2018 at 9:50 AM Yingfeng Wang <[email protected]> wrote:

> Greg,
>
> Thanks.  The first way does not work. I got the following error message.
>
> *Database.cpp:148:15: **error: **cannot initialize a variable of type
> 'RDKit::Atom *'*
>
> *      with an rvalue of type 'const RDKit::Atom *'*
>
>         Atom *atom = (*pCurrentROMol)[*atBegin];
>
>
> The second way, which uses "auto", works. I also updated the code for bond
> and got a new error with the following error message.
>
> *Database.cpp:164:49: **error: **no member named 'get' in 'RDKit::Bond'*
>
>         sEdgeLabel += ((queryIsBondInRing(bond->get())) ? "ring|" :
> "linear|" );
>
> *                                          ~~~~  ^*
>
> 1 error generated.
>
> Could you please confirm that the updated class Bond removes method get()?
> If this is the case, which method should I use?
>
> Again, thank you very much for your help!
>
> Yingfeng
>
>
>
> On Wed, Dec 12, 2018 at 12:58 AM Greg Landrum <[email protected]>
> wrote:
>
>> Hi Yingfeng,
>>
>> As part of the move over to Modern C++ we also changed the way atoms and
>> bonds are stored in molecules: you now get raw pointers back instead of
>> smart pointers.
>> If you change your code from:
>>  boost::shared_ptr<Atom> atom = (*pCurrentROMol)[*atBegin];
>> to:
>>  Atom *atom = (*pCurrentROMol)[*atBegin];
>> or, even simpler:
>>  auto atom = (*pCurrentROMol)[*atBegin];
>>
>> things should work.
>> -greg
>>
>>
>> On Wed, Dec 12, 2018 at 12:36 AM Yingfeng Wang <[email protected]>
>> wrote:
>>
>>> I am using the C++ library of RDKit on Mac. My C++ code works with
>>> RDKit_2017_09_3. However, after I switch to RDKit 2018_03_4, I got the
>>> following error when compiling my C++ source code.
>>>
>>> *Database.cpp:148:33: **error: **no viable conversion from 'const
>>> RDKit::Atom *' to*
>>>
>>> *      'boost::shared_ptr<Atom>'*
>>>
>>>         boost::shared_ptr<Atom> atom = (*pCurrentROMol)[*atBegin];
>>>
>>> *                                ^      ~~~~~~~~~~~~~~~~~~~~~~~~~~*
>>>
>>> */usr/local/Cellar/boost/1.68.0/include/boost/smart_ptr/shared_ptr.hpp:358:21:
>>> **note: *
>>>
>>>       candidate constructor not viable: no known conversion from
>>>
>>>       'const RDKit::Atom *' to 'boost::detail::sp_nullptr_t' (aka
>>> 'nullptr_t')
>>>
>>>       for 1st argument
>>>
>>>     BOOST_CONSTEXPR shared_ptr( boost::detail::sp_nullptr_t )
>>> BOOST_SP_N...
>>>
>>> *                    ^*
>>>
>>> */usr/local/Cellar/boost/1.68.0/include/boost/smart_ptr/shared_ptr.hpp:422:5:
>>> **note: *
>>>
>>>       candidate constructor not viable: no known conversion from
>>>
>>>       'const RDKit::Atom *' to 'const boost::shared_ptr<RDKit::Atom> &'
>>> for 1st
>>>
>>>       argument
>>>
>>>     shared_ptr( shared_ptr const & r ) BOOST_SP_NOEXCEPT : px( r.px ),
>>> p...
>>>
>>> *    ^*
>>>
>>> I am using Clang on Mac. The version information is given as follows.
>>>
>>> g++ -v
>>>
>>> Configured with: --prefix=/Library/Developer/CommandLineTools/usr
>>> --with-gxx-include-dir=/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/include/c++/4.2.1
>>>
>>> Apple LLVM version 10.0.0 (clang-1000.10.44.4)
>>>
>>> Target: x86_64-apple-darwin18.2.0
>>>
>>> Thread model: posix
>>>
>>> I notice that "Starting with the 2018_03 release, the RDKit core C++
>>> code is written in modern C++; for this release that means C++11. "
>>>
>>> Actually, I also use -std=c++11 when compiling my C++ source code. I
>>> also tested RDKit 2018_09_1 and got the similar error. I am wondering how
>>> to fix this problem.
>>>
>>> Thanks.
>>>
>>> Yingfeng
>>>
>>>
>>> _______________________________________________
>>> Rdkit-discuss mailing list
>>> [email protected]
>>> https://lists.sourceforge.net/lists/listinfo/rdkit-discuss
>>>
>>
_______________________________________________
Rdkit-discuss mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/rdkit-discuss

Reply via email to