<br><br><div><span class="gmail_quote">2007/3/14, Pedro Venda <<a href="mailto:pjvenda@pjvenda.org">pjvenda@pjvenda.org</a>>:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
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</blockquote><div><br>Normal. You haven't patched libkexiv2 library used by digiKam.
<br><br>Actually, digiKam depand of both. In the future, only the libkexiv2 interface will be used.<br><br>Gilles</div></div><br>