我正在尝试在 C++ 中的 Qt 4.5 中创建以下数据结构:
QMap<int, QMap<QString, QVector<QPointF> > > animation;
但是,在我的代码中包含这一行会导致以下错误:
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
我的组织要求我将所有警告都视为错误,所以我不能简单地忽略它。这是 Qt 中的错误,还是我做错了什么?
最佳答案
您提到的代码适用于 Intel/Mac OS X 上的 Qt 4.6.1 和 GCC 4.4.1。
$ 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
$
所以您的问题可能已通过升级到 Qt 4.6.1 得到解决。 (除非它是特定于编译器目标的错误,这似乎不太可能;另外,您还没有告诉我们您正在编译的平台。)
关于c++ - Qt4: QMap导致 "strict-aliasing rules"编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2248936/