QCustomPlot包含Linux / Ubuntu上的奇怪错误

时间:2015-12-03 16:10:02

标签: c++ linux qt qcustomplot

每当我包含文件qcustomplot.h时,就会出现大量错误。 我似乎无法解决这个问题,特别是因为它在Windows和Mac上运行良好。也许有人遇到了同样的问题。

以下是出现的错误消息:

In file included from ../maitime/linux_x11.h:9:0,
                 from ../maitime/recognize.h:20,
                 from ../maitime/mainwindow.h:6,
                 from ../maitime/main.cpp:2:
../../../Qt/5.5/gcc_64/include/QtPrintSupport/qabstractprintdialog.h:64:9: error: expected identifier before numeric constant
         None                    = 0x0000, // obsolete
         ^
../../../Qt/5.5/gcc_64/include/QtPrintSupport/qabstractprintdialog.h:64:9: error: expected '}' before numeric constant
../../../Qt/5.5/gcc_64/include/QtPrintSupport/qabstractprintdialog.h:64:9: error: expected unqualified-id before numeric constant
In file included from ../../../Qt/5.5/gcc_64/include/QtCore/qglobal.h:1102:0,
                 from ../../../Qt/5.5/gcc_64/include/QtCore/qcoreapplication.h:37,
                 from ../../../Qt/5.5/gcc_64/include/QtWidgets/qapplication.h:37,
                 from ../../../Qt/5.5/gcc_64/include/QtWidgets/QApplication:1,
                 from ../maitime/main.cpp:1:
../../../Qt/5.5/gcc_64/include/QtPrintSupport/qabstractprintdialog.h:74:41: error: 'PrintDialogOption' was not declared in this scope
     Q_DECLARE_FLAGS(PrintDialogOptions, PrintDialogOption)
                                         ^
../../../Qt/5.5/gcc_64/include/QtCore/qflags.h:156:16: note: in definition of macro 'Q_DECLARE_FLAGS'
 typedef QFlags<Enum> Flags;
                ^
../../../Qt/5.5/gcc_64/include/QtCore/qflags.h:156:20: error: template argument 1 is invalid
 typedef QFlags<Enum> Flags;
                    ^
../../../Qt/5.5/gcc_64/include/QtPrintSupport/qabstractprintdialog.h:74:5: note: in expansion of macro 'Q_DECLARE_FLAGS'
     Q_DECLARE_FLAGS(PrintDialogOptions, PrintDialogOption)
     ^
In file included from ../../../Qt/5.5/gcc_64/include/QtPrintSupport/QtPrintSupport:4:0,
                 from ../maitime/qcustomplot/qcustomplot.h:54,
                 from ../maitime/mainwindow.h:11,
                 from ../maitime/main.cpp:2:
../../../Qt/5.5/gcc_64/include/QtPrintSupport/qabstractprintdialog.h:77:44: error: expected ')' before '*' token
     explicit QAbstractPrintDialog(QPrinter *printer, QWidget *parent = 0);
                                            ^
../../../Qt/5.5/gcc_64/include/QtPrintSupport/qabstractprintdialog.h:78:28: error: expected constructor, destructor, or type conversion before ';' token
     ~QAbstractPrintDialog();
                            ^
../../../Qt/5.5/gcc_64/include/QtPrintSupport/qabstractprintdialog.h:80:22: error: 'virtual' outside class declaration
     virtual int exec() = 0;
                      ^
../../../Qt/5.5/gcc_64/include/QtPrintSupport/qabstractprintdialog.h:80:26: error: function 'int exec()' is initialized like a variable
     virtual int exec() = 0;
                          ^
../../../Qt/5.5/gcc_64/include/QtPrintSupport/qabstractprintdialog.h:83:27: error: variable or field 'addEnabledOption' declared void
     void addEnabledOption(PrintDialogOption option);
                           ^
../../../Qt/5.5/gcc_64/include/QtPrintSupport/qabstractprintdialog.h:83:27: error: 'PrintDialogOption' was not declared in this scope
../../../Qt/5.5/gcc_64/include/QtPrintSupport/qabstractprintdialog.h:85:41: error: non-member function 'PrintDialogOptions enabledOptions()' cannot have cv-qualifier
     PrintDialogOptions enabledOptions() const;
                                         ^
../../../Qt/5.5/gcc_64/include/QtPrintSupport/qabstractprintdialog.h:86:26: error: 'PrintDialogOption' was not declared in this scope
     bool isOptionEnabled(PrintDialogOption option) const;
                          ^
../../../Qt/5.5/gcc_64/include/QtPrintSupport/qabstractprintdialog.h:86:52: error: expected ',' or ';' before 'const'
     bool isOptionEnabled(PrintDialogOption option) const;
                                                    ^
../../../Qt/5.5/gcc_64/include/QtPrintSupport/qabstractprintdialog.h:90:24: error: variable or field 'setPrintRange' declared void
     void setPrintRange(PrintRange range);
                        ^
../../../Qt/5.5/gcc_64/include/QtPrintSupport/qabstractprintdialog.h:90:24: error: 'PrintRange' was not declared in this scope
../../../Qt/5.5/gcc_64/include/QtPrintSupport/qabstractprintdialog.h:91:5: error: 'PrintRange' does not name a type
     PrintRange printRange() const;
     ^
../../../Qt/5.5/gcc_64/include/QtPrintSupport/qabstractprintdialog.h:94:19: error: non-member function 'int minPage()' cannot have cv-qualifier
     int minPage() const;
                   ^
../../../Qt/5.5/gcc_64/include/QtPrintSupport/qabstractprintdialog.h:95:19: error: non-member function 'int maxPage()' cannot have cv-qualifier
     int maxPage() const;
                   ^
../../../Qt/5.5/gcc_64/include/QtPrintSupport/qabstractprintdialog.h:98:20: error: non-member function 'int fromPage()' cannot have cv-qualifier
     int fromPage() const;
                    ^
../../../Qt/5.5/gcc_64/include/QtPrintSupport/qabstractprintdialog.h:99:18: error: non-member function 'int toPage()' cannot have cv-qualifier
     int toPage() const;
                  ^
../../../Qt/5.5/gcc_64/include/QtPrintSupport/qabstractprintdialog.h:101:25: error: non-member function 'QPrinter* printer()' cannot have cv-qualifier
     QPrinter *printer() const;
                         ^
../../../Qt/5.5/gcc_64/include/QtPrintSupport/qabstractprintdialog.h:103:1: error: expected unqualified-id before 'protected'
 protected:
 ^
../../../Qt/5.5/gcc_64/include/QtPrintSupport/qabstractprintdialog.h:106:1: error: expected unqualified-id before 'private'
 private:
 ^
In file included from ../../../Qt/5.5/gcc_64/include/QtCore/qcoreapplication.h:37:0,
                 from ../../../Qt/5.5/gcc_64/include/QtWidgets/qapplication.h:37,
                 from ../../../Qt/5.5/gcc_64/include/QtWidgets/QApplication:1,
                 from ../maitime/main.cpp:1:
../../../Qt/5.5/gcc_64/include/QtCore/qglobal.h:1043:35: error: 'QAbstractPrintDialog& operator=(const QAbstractPrintDialog&)' must be a nonstatic member function
     Class &operator=(const Class &) Q_DECL_EQ_DELETE;
                                   ^
../../../Qt/5.5/gcc_64/include/QtPrintSupport/qabstractprintdialog.h:107:5: note: in expansion of macro 'Q_DISABLE_COPY'
     Q_DISABLE_COPY(QAbstractPrintDialog)
     ^
In file included from ../../../Qt/5.5/gcc_64/include/QtPrintSupport/QtPrintSupport:4:0,
                 from ../maitime/qcustomplot/qcustomplot.h:54,
                 from ../maitime/mainwindow.h:11,
                 from ../maitime/main.cpp:2:
../../../Qt/5.5/gcc_64/include/QtPrintSupport/qabstractprintdialog.h:110:1: error: expected declaration before '}' token
 };
 ^

这是我的.pro:

#-------------------------------------------------
#
# Project created by QtCreator 2012-05-09T21:19:57
#
#-------------------------------------------------

QT       += core gui \
            printsupport

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = maiTime
TEMPLATE = app

SOURCES +=  main.cpp\
            mainwindow.cpp \
            applicationdata.cpp \
            visualize.cpp \
            windowinfo.cpp \
            record.cpp \
            recognize.cpp \
            restrict.cpp \
            whitelist_dialog.cpp \
            settings.cpp \
            qcustomplot/qcustomplot.cpp


HEADERS  += mainwindow.h \
            windowinfo.h \
            applicationdata.h \
            visualize.h \
            record.h \
            recognize.h \
            restrict.h \
            whitelist_dialog.h \
            settings.h \
            qcustomplot/qcustomplot.h

macx {
    OBJECTIVE_SOURCES += mac.mm
    HEADERS += mac.h
    LIBS += -framework Cocoa
}

unix:!macx {
    HEADERS += linux_x11.h
    SOURCES += linux_x11.cpp
    LIBS += -lX11
    CONFIG += c++11
}

win32 {
    SOURCES += win.cpp
    HEADERS += win.h
    LIBS += -lpsapi
}

FORMS += \
    mainwindow.ui \
    whitelist_dialog.ui


RESOURCES += \
    resources.qrc

ICON = lemon.icns

创建全新的应用程序时,不会出现这些错误。 这就是我们如何包含文件的方式: #include "qcustomplot/qcustomplot.h" (是的,路径是正确的)

我们正在运行Qt 5.5。

提前致谢!

1 个答案:

答案 0 :(得分:2)

感谢您的帮助,我们发现了错误。 事实上,它只是一条线需要重新订购.. 这是我们的主窗口:

#include <QMainWindow>
#include <QtWidgets>
#include "recognize.h"
#include "record.h"
#include "restrict.h"
#include "visualize.h"
#include "whitelist_dialog.h"
#include "qcustomplot/qcustomplot.h"

这是我们的识别:

#include <QtCore>
#include <QString>
#include <QWindow>
#include <QDebug>
#include <QDateTime>
#include <QCoreApplication>
#include "windowinfo.h"
#include "linux_x11.h"

这会导致错误。我们所要做的就是在

之后立即重新订购我们的recogn.h的包含
#include qcustomplot/qcustomplot.h

感谢您的帮助! 永远记住,linux下qcustomplot includes的顺序非常重要!

此外:讨论相同问题的链接: http://forum.qtfr.org/discussion/4438/qt4-linux-inclusion-de-xlib-h-qui-pose-probleme(不幸的是法语)