Pedro,<br><br>I post the Andreas response in this room :<br><br><div style="direction: ltr;">Hi Gilles,<br><br>This is due to exiv2 rev. 1077<br><br>    <a onclick="return top.js.OpenExtLink(window,event,this)" href="http://dev.robotbattle.com/cmtinfo_svn.php?r=10&l=50&v=1077" target="_blank">
http://dev.robotbattle.com/cmtinfo_svn.php?r=10&l=50&v=1077</a><br><br>which changed the signature of Error::what() to return const char*<br>instead of std::string. The change was necessary to be able to inherit<br>
the Exiv2 errors from std::exception, which is a generally recommended<br>practice as I learnt recently. There is a thread on this in the Exiv2<br>group, starting here:<br><br>    <a onclick="return top.js.OpenExtLink(window,event,this)" href="http://uk.groups.yahoo.com/group/exiv2/message/657" target="_blank">
http://uk.groups.yahoo.com/group/exiv2/message/657</a><br></div><div style="direction: ltr;"><span class="q"><br>> To fix it, i need to change :<br>><br>>         qDebug("Cannot clear Iptc data using Exiv2 (%s)",
<br>> e.what().c_str());<br>><br>> like<br>><br>>         qDebug("Cannot clear Iptc data using Exiv2 (%s)", e.what());<br>><br>> If i fix the code, likexiv2 will depand of next Exiv2 release only...
<br><br></span></div><div style="direction: ltr;">There a other possibilities to fix this so that it also compiles with<br>older versions. I can think of:<br><br>1) Use the EXIV2_CHECK_VERSION macro to test which Exiv2 version is in
<br>use<br><br>2) Use op<< to build the string, e.g.<br><br>        std::ostringstream os;<br>        os << "Cannot clear Iptc data using Exiv2 (" << e << ")";<br>        qDebug("%s", 
os.str().c_str());<br><br>3) Make a temporary std::string, e.g.,<br><br>        std::string s(e.what());<br>        qDebug("Cannot clear Iptc data using Exiv2 (%s)", s.c_str());<br><br>Regarding 1) I've also added 2 new functions, Exiv2::versionNumber() and
<br>Exiv2::version(), which are used to check the Exiv2 library version<br>available at _runtime_. In the future you can use these in digikam<br>about dialog to tell which version the user is running.<br><br>Regards,<br></div>
<span class="sg">Andreas</span><br><br><div><span class="gmail_quote">2007/3/14, Gilles Caulier <<a href="mailto:caulier.gilles@gmail.com">caulier.gilles@gmail.com</a>>:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Andreas,<br><br>look this message from digikam-users mailling list<br><br>Any suggestions ?<br><span class="sg"><br>Gilles</span><div><span class="e" id="q_1115295cc331a661_2"><br><br>---------- Forwarded message ----------
<br><span class="gmail_quote">From: <b class="gmail_sendername">Pedro Venda
</b> <<a href="mailto:pjvenda@pjvenda.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">pjvenda@pjvenda.org</a>><br>Date: 14 mars 2007 23:21<br>Subject: [Digikam-users] potential incompatibility between exiv2-svn and 
exiv2-0.12<br>To: <a href="mailto:digikam-users@kde.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">
digikam-users@kde.org</a><br><br></span>Hi everyone,<br><br>I am facing another compilation error, for which I do not have enough C++<br>experience to handle. I am compiling digikam along with trunk/exiv2<br>and trunk/extragear/libs, I have updated the svn copy of digikam several
<br>times and even rm -rf and rechecked the whole trees again to rule out any<br>mess I might have made.<br><br>The following error happens when compiling several objects from<br>digikam/libs/widgets/metadata/:<br><br>if /bin/sh ../../../../libtool --silent --tag=CXX --mode=compile
<br>g++ -DHAVE_CONFIG_H -I. -I. -I../../../.. -I../../../../digikam/libs/dmetadata -I../../../../digikam/libs/dimg -I/usr/local/digikam-trunk/include   -I../../../../digikam/digikam -I/usr/kde/3.5/include -I/usr/qt/3/include -I.   -DQT_THREAD_SUPPORT  -D_REENTRANT  -Wno-long-long -Wundef -ansi -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -Wcast-align -Wchar-subscripts -Wall -W -Wpointer-arith -O2 -I/usr/local/digikam-trunk/include -Wformat-security -Wmissing-format-attribute -Wno-non-virtual-dtor -fno-exceptions -fno-check-new -fno-common -DQT_CLEAN_NAMESPACE -DQT_NO_ASCII_CAST -DQT_NO_STL -DQT_NO_COMPAT -DQT_NO_TRANSLATION -DQT_CLEAN_NAMESPACE -DQT_CLEAN_NAMESPACE -DQT_NO_ASCII_CAST -DQT_NO_STL -DQT_NO_COMPAT -DQT_NO_TRANSLATION -fexceptions -MT
<br>iptcwidget.lo -MD -MP -MF ".deps/iptcwidget.Tpo" -c -o iptcwidget.lo<br>iptcwidget.cpp; \<br>    then mv -f ".deps/iptcwidget.Tpo" ".deps/iptcwidget.Plo"; else<br>rm -f ".deps/iptcwidget.Tpo"; exit 1; fi
<br>iptcwidget.cpp: In member function 'virtual bool<br>Digikam::IptcWidget::decodeMetadata()':<br>iptcwidget.cpp:159: error: request for member 'c_str'<br>in '((Exiv2::Error*)e)->Exiv2::Error::what()', which is of non-class
<br>type 'const char*'<br>iptcwidget.cpp: In member<br>function 'virtual QString Digikam::IptcWidget::getTagTitle(const QString&)':<br>iptcwidget.cpp:188: error: request for member 'c_str'<br>

in '((Exiv2::Error*)e)->Exiv2::Error::what()', which is of non-class
<br>type 'const char*'<br>iptcwidget.cpp: In member<br>function 'virtual QString Digikam::IptcWidget::getTagDescription(const<br>QString&)':<br>iptcwidget.cpp:205: error: request for member 'c_str'
<br>in '((Exiv2::Error*)e)->Exiv2::Error::what()', which is of non-class<br>type 'const char*'<br>make[5]: *** [iptcwidget.lo] Error 1<br><br>I looked at the exiv2 error.hpp (exiv2-svn) header and I found that the method
<br>Exiv2::Error.what() already returns a (const char *) so c_str() is (probably)<br>not adequate. The affected source files were: iptcwidget.cpp, exifwidget.cpp,<br>gpswidget.cpp and makernotewidget.cpp.<br><br>This what() method differs in the way it is being prototyped/implemented
<br>between exiv2-svn and exiv2-0.12 (error.hpp).<br>exiv2-svn is:<br>        virtual const char* what() const throw() { return msg_.c_str(); }<br>exiv2-0.12 is:<br>        virtual std::string what() const;<br><br>The call to c_str() might work if called from a std::string object, but not
<br>from a const char * type variable (which is not even semantically correct).<br>If I remove the call to c_str() on the affected objects, digikam compiles<br>correctly but doesn't work. It starts and immediately after showing up the
<br>main screen, it segfaults with:<br><br>terminate called after throwing an instance of 'std::bad_alloc'<br>  what():  St9bad_alloc<br><br>Obviously, this is related to my changes on the source files.<br>The next step I took was to compile digikam-svn against my system's 
exiv-0.12.<br>It worked well, so I think I have found an incompatibility here...<br><br>I need help here from C++ developers. I suppose this should be quite simple to<br>fix.<br><br>Best regards,<br>--<br><br>Pedro Joćo Lopes Venda
<br>email: pjvenda at pjvenda org<br><a href="http://www.pjvenda.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">http://www.pjvenda.org</a><br>_______________________________________________<br>

Digikam-users mailing list<br><a href="mailto:Digikam-users@kde.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">Digikam-users@kde.org
</a><br><a href="https://mail.kde.org/mailman/listinfo/digikam-users" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">https://mail.kde.org/mailman/listinfo/digikam-users</a><br>
</span></div></blockquote></div><br>