[Ipopt] Using smart pointers

Brad Bell bradbell at seanet.com
Tue Jul 1 15:02:41 EDT 2008


I ran into the same problem and solved it by having a separate class for the extra member fucntions and passed a point to the extra class to the class derived from TNLP.

Take a look at the specifications for solution at
    http://www.coin-or.org/CppAD/Doc/ipopt_cppad_nlp.xml#solution

The implementation from the users point of view is at
    http://www.coin-or.org/CppAD/Doc/ipopt_cppad.cpp.xml

On Tue, 1 Jul 2008 07:02:55 -0700 (PDT), Krish Krishnan wrote
> Hi All:
> 
> I have a windows application using MFC to create an optimized portfolio of common stock.  I used the cpp example as a template and derived my class from TNLP.  The difference between my implementation and that in the example is that I have many new members and a few more functions (to access data in databases ) etc.
> 
> When I try to compile this, the compiler complains that the new data members are not part of the TNLP class. For example some of the error messages are below:
> 
> rojects\bmopt\bmopt\createcase.cpp(262) : error C2039: 'm_caseFileName' : is not a member of 'Ipopt::TNLP'
> 1>       c:\optdir\iptnlp.hpp(48) : see declaration of 'Ipopt::TNLP'
> 1>c:\documents and settings\kris\mydocuments\projects\bmopt\bmopt\createcase.cpp(264) : error C2039: 'm_assetBoundsDB' : is not a member of 'Ipopt::TNLP'
> 1>        c:\optdir\iptnlp.hpp(48) : see declaration of 'Ipopt::TNLP'
> 1>c:\documents and settings\kris\my documents\projects\bmopt\bmopt\createcase.cpp(265) : error C2039: 'm_assetBoundsTable' : is not a member of 'Ipopt::TNLP'
> 1>        c:\optdir\iptnlp.hpp(48) : see declaration of 'Ipopt::TNLP'
> 1>c:\documents and settings\kris\my documents\projects\bmopt\bmopt\createcase.cpp(267) : error C2039: 'm_assetReturnDB' : is not a member of 'Ipopt::TNLP'
> 1>        c:\optdir\iptnlp.hpp(48) : see declaration of 'Ipopt::TNLP'
> 
> But this is not right, and these members are present in the derived class.  I declare the smart pointerthus:
> 
>     SmartPtr<TNLP> p_optdata;
> and instantiate it as p_optdata = new COpt() where COpt is the derived class from TNLP.
> 
> Is there some other way I should treat this derived class?  If any more information is needed, please let me know?  
> 
> I even tried SmarPtr<COpt> p_optdata.  The compiler does not like this. The complaints about the new data members are gone. but instead I get
> 
> 1>c:\documents and settings\kris\my documents\projects\bmopt\bmopt\bmoptdoc.cpp(105) : error C2664: 'Ipopt::IpoptApplication::OptimizeTNLP' : cannot convert parameter 1 from 'Ipopt::SmartPtr<T>' to 'const Ipopt::SmartPtr<T> &'
> 1>        with
> 1>        [
> 1>           T=COpt
> 1>        ]
> 1>        and
> 1>        [
> 1>            T=Ipopt::TNLP
> 1>       ]
> 1>        Reason: cannot convert from 'Ipopt::SmartPtr<T>' to 'const Ipopt::SmartPtr<T>'
> 1>       with
> 1>        [
> 1>            T=COpt
> 1>        ]
> 1>        and
> 1>       [
> 1>           T=Ipopt::TNLP
> 1>       ]
> 1>        No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
> 
> I guess this is because oc the const declaration.Any way I can solve this issue?  This is the very last part of my implementation, and any help would be appreciated.Thanks in advance
> 
> Krish

Brad Bell 
home:  http://www.seanet.com/~bradbell 
work:  brad at apl.washington.edu 
other: bradbell at seanet.com
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://list.coin-or.org/pipermail/ipopt/attachments/20080701/91b0cfa1/attachment.html 


More information about the Ipopt mailing list