[Kde-games-devel] Legacy code problem in libkdegames/kgame
Ian Wadham
iandw.au at gmail.com
Thu Dec 29 02:13:44 UTC 2011
In libkdegames/kgame there is a header file kgamepropertyarray.h which
contains a definition for class KGamePropertyArray. In this class there is
a method declaration and definition as follows:
void sort()
{
QByteArray b;
QDataStream s(b, QIODevice::WriteOnly);
….
}
This compiles in most environments (apparently) but failed to compile when
I used Macports to port kdegames 4.7.4 to my Apple Macbook. The offending
header is referenced by KFourInLine. I am still investigating the details, so I do
not yet know whether KFourInline actually uses KGamePropertyArray::sort(),
but I thought I should draw this problem to the KDE Games group's attention,
seeing as we are so close to a KDE SC 4.8 release and (I think I read somewhere)
there might be no more releases on the KDE SC 4.7 branch.
What I wonder is whether anyone else has any ideas, fixes or workarounds for this?
I also wonder how this code compiles at all in KDE Games' day-to-day work and
in KDE SC releases?
In Qt 4.7, QDataStream can have a constructor with a const QByteArray & and
no second parameter, so the QByteArray must have read-only mode. Or it can
be constructed with a QByteArray * and a second parameter for the mode,
which can then be ReadOnly, WriteOnly, etc.
Neither constructor matches the existing code, so whatever compiler Macports
is using is quite right to flag an error, but why don't other compilers, especially the
ones KDE releases use?
The code in question seems to be a holdover from Qt 3 days. See:
http://doc.qt.nokia.com/3.3/qdatastream.html#QDataStream-3
The constructor with plain QByteArray and a mode was allowed back then.
All the best, Ian W.
P.S. I have upgraded my Macbook to OS X 10.7.2 Lion and XCode 4.2.1 and
am currently re-building all my Macports "ports" of Qt-mac, kdelibs (4.7) and
kdegames (4.7.4), after upgrading Macports to v. 2.0.3. I think this may be
bringing in some newer, tougher compilers, but I have not yet investigated that.
More information about the kde-games-devel
mailing list