From: Jeffrey W. <nol...@gm...> - 2011-09-20 21:35:36
|
On Tue, Sep 20, 2011 at 5:13 PM, Bollinger, John C <Joh...@st...> wrote: > Hello All, > > As I wrote a few minutes ago, I am attempting to build PDFedit v 0.4.5 on CentOS 5, using the distro's provided GCC 4.1.2 toolchain. The method CPageContents::addInlineImage() is giving me some trouble, the bulk of which I raised in my previous mail. In addition, however, I see some worrisome warnings in the same method: > > g++ -c -g -O2 -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fno-strict-aliasing -fexceptions -fstack-protector -pipe -posix -ansi -std=c++98 -pedantic -I. -I/home/jbolling/rpm/BUILD/pdfedit-0.4.5/src -I/home/jbolling/rpm/BUILD/pdfedit-0.4.5/src/xpdf/ -I/usr/include -I/usr/include/freetype2 -I/usr/include -o cpagecontents.o cpagecontents.cc > cpagecontents.cc: In member function 'void pdfobjects::CPageContents::addInlineImage(const std::vector<char, std::allocator<char> >&, const libs::Point&, const libs::Point&)': > cpagecontents.cc:543: warning: passing 'const double' for argument 1 to 'pdfobjects::CObjectSimple<Tp>::CObjectSimple(const typename pdfobjects::PropertyTraitSimple<Tp>::value&) [with pdfobjects::PropertyType Tp = pInt]' > [...] > cpagecontents.cc:544: warning: passing 'const double' for argument 1 to 'pdfobjects::CObjectSimple<Tp>::CObjectSimple(const typename pdfobjects::PropertyTraitSimple<Tp>::value&) [with pdfobjects::PropertyType Tp = pInt]' > > These arise from the following two lines of code: > > image_dict.addProperty ("W", CInt (image_size.x)); > image_dict.addProperty ("H", CInt (image_size.y)); > > Evidently, image_size.x and image_size.y are of type (const double), but they are passed to a constructor expecting an int&. I'm neither sure what is needed, nor sure what actually happens here (and that in itself is a minor problem). Given that we're dealing with references, however, I can't think of an approach the compiler could take to the issue that would be likely to have a satisfactory result. > > The most obvious fix would be to change the CInts to CReals, but I don't know whether that would cause trouble elsewhere in the program.CInt (static_cast<int>(image_size.x)) CInt (static_cast<int>(image_size.x)) and CInt (static_cast<int>(image_size.y)) ? Otherwise, you might need to change Tp to float or double (which seems like a lot more work). Since PDFs are widely abused as vectors (and it is CentOS), you might want to verify image_size.x and image_size.y are within bounds of the [integer] data type if you choose to cast. numeric_limits is your friend. Jeff |