Seite 1 von 1

static_cast funktioniert nicht mit Qt 5.3.0

Verfasst: 17. Juli 2014 20:55
von Wowbagger
Hallo,

der folgende Code funktioniert einwandfrei mit Qt 5.2.1, jedoch nicht mit Qt 5.3.0. Kann mir jemand sagen, woran das liegt, bzw. einen Workaround vorschlagen. Der Code ist vereinfacht aus einem Fremdprojekt.

Danke!

Code: Alles auswählen

    quint64 p = 1;
    const QFile::Permissions perm = static_cast< QFile::Permissions >( p );
Fehlermeldung:

Code: Alles auswählen

g++ -c -pipe -g -Wall -W -D_REENTRANT -fPIE -DQT_CORE_LIB -I/opt/Qt/5.3/gcc_64/mkspecs/linux-g++ -I../test_static-cast -I/opt/Qt/5.3/gcc_64/include -I/opt/Qt/5.3/gcc_64/include/QtCore -I. -I. -o main.o ../test_static-cast/main.cpp
../test_static-cast/main.cpp: In function 'int main(int, char**)':
../test_static-cast/main.cpp:9:74: error: conversion from 'quint64 {aka long long unsigned int}' to 'QFlag' is ambiguous
     const QFile::Permissions perm = static_cast< QFile::Permissions >( p );
                                                                          ^
../test_static-cast/main.cpp:8:13: note: candidates are:
     quint64 p = 1;
             ^
In file included from /opt/Qt/5.3/gcc_64/include/QtCore/qglobal.h:1065:0,
                 from /opt/Qt/5.3/gcc_64/include/QtCore/qcoreapplication.h:45,
                 from /opt/Qt/5.3/gcc_64/include/QtCore/QCoreApplication:1,
                 from ../test_static-cast/main.cpp:1:
/opt/Qt/5.3/gcc_64/include/QtCore/qflags.h:63:29: note: QFlag::QFlag(ushort)
     Q_DECL_CONSTEXPR inline QFlag(ushort ai) : i(int(uint(ai))) {}
                             ^
/opt/Qt/5.3/gcc_64/include/QtCore/qflags.h:62:29: note: QFlag::QFlag(short int)
     Q_DECL_CONSTEXPR inline QFlag(short ai) : i(int(ai)) {}
                             ^
/opt/Qt/5.3/gcc_64/include/QtCore/qflags.h:61:29: note: QFlag::QFlag(uint)
     Q_DECL_CONSTEXPR inline QFlag(uint ai) : i(int(ai)) {}
                             ^
/opt/Qt/5.3/gcc_64/include/QtCore/qflags.h:60:29: note: QFlag::QFlag(int)
     Q_DECL_CONSTEXPR inline QFlag(int ai) : i(ai) {}
                             ^
/opt/Qt/5.3/gcc_64/include/QtCore/qflags.h:108:29: note: initializing argument 1 of 'QFlags<T>::QFlags(QFlag) [with Enum = QFileDevice::Permission]'
     Q_DECL_CONSTEXPR inline QFlags(QFlag f) : i(f) {}
                             ^
../test_static-cast/main.cpp:9:30: warning: unused variable 'perm' [-Wunused-variable]
     const QFile::Permissions perm = static_cast< QFile::Permissions >( p );
                              ^
Makefile:502: recipe for target 'main.o' failed
make: *** [main.o] Error 1

Re: static_cast funktioniert nicht mit Qt 5.3.0

Verfasst: 17. Juli 2014 21:22
von Christian81
Er kann sich einfach nicht entscheiden wie er das quint64 behandeln soll - entweder als ushort, short, uint oder int - wo ist das Problem?

Re: static_cast funktioniert nicht mit Qt 5.3.0

Verfasst: 17. Juli 2014 21:58
von Wowbagger
Christian81 hat geschrieben:Er kann sich einfach nicht entscheiden wie er das quint64 behandeln soll - entweder als ushort, short, uint oder int - wo ist das Problem?
Was verwendet er denn, wenn ich mit Qt 5.2.1 kompiliere?

Re: static_cast funktioniert nicht mit Qt 5.3.0

Verfasst: 17. Juli 2014 22:52
von Christian81
Keine Ahnung - dort gibt es vielleicht nur einen ctor den er casten könnte - schau doch einfach nach welche ctors QFlags in Qt 5.2 hat.