2010-02-12 4 views
2

Je suis en train de créer la structure de données suivante dans Qt 4.5 en C++:Qt4: QMap causant "des règles strictes-aliasing" erreur de compilation

QMap<int, QMap<QString, QVector<QPointF> > > animation;

Cependant, l'inclusion de cette ligne dans mon code résultats dans l'erreur suivante:

cc1plus: warnings being treated as errors 
In file included from XXX/XXX/XXX/MainWindow.qt.C.tmp.C:113: 
/usr/lib/qt4/include/QtCore/qmap.h: In member function ‘void MainWindow::exportAnn()’: 
/usr/lib/qt4/include/QtCore/qmap.h:588: error: dereferencing pointer ‘y’ does break strict-aliasing rules 
/usr/lib/qt4/include/QtCore/qmap.h:586: note: initialized from here 
Command exited with non-zero status 1 

Mon organisation me demande de traiter tous les avertissements comme des erreurs, donc je ne peux pas simplement ignorer ce. Est-ce un bug dans Qt, ou y at-il quelque chose que je fais mal?

+0

Cela ressemble à quelque chose que vous devriez signaler au projet Qt. Je ne pense pas que quiconque ici puisse vous aider. – LiraNuna

+0

Quel compilateur utilisez-vous? des indicateurs de compilation spéciaux qui pourraient appliquer ces règles d'alias? – shoosh

+0

J'utilise g ++ 4.4.1, et mes drapeaux de compilation sont -Wall, -Werror, -g, -O3 et -fPIC – rcv

Répondre

0

Le code que vous mentionnez fonctionne très bien avec Qt 4.6.1 et GCC 4.4.1 sur Intel/Mac OS X.

$ cat a.cpp #include <QtCore> 
void foo (QMap<int, QMap<QString, QVector<QPointF> > > &map) 
    { map.clear(); } 
$ g++-4.4-fsf -c -DQT_CORE_LIB -DQT_SHARED -I/Library/Frameworks/QtCore.framework/Versions/4/Headers a.cpp -W -Wall -Werror -g -O3 -fPIC 
$ 

Donc, votre problème est probablement résolu par une mise à Qt 4.6.1. (À moins que ce soit un bogue spécifique à la cible du compilateur, ce qui semble improbable, de plus, vous ne nous avez pas indiqué sur quelle plate-forme vous compilez.)