[Ipopt] Using smart pointers
Krish Krishnan
rkrishnan8216 at yahoo.com
Tue Jul 1 10:02:55 EDT 2008
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\my documents\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 pointer thus:
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://list.coin-or.org/pipermail/ipopt/attachments/20080701/9d683e40/attachment.html
More information about the Ipopt
mailing list