Qt запрещает объявление QListView без типа - PullRequest
1 голос
/ 19 сентября 2011

У меня очень странная ошибка в моем проекте Qt.Вот код main_window.h:

#include <QtGui>
#include <QtSql>

class main_window : public QTabWidget
{
    Q_OBJECT

    /// @name List Widgets
private:
    QListWidget*    m_documents_list;
....

, а вот main_window.cpp:

...
void main_window::create_documents_widget()
{
    m_documents = new QWidget(this);
    m_documents_list = new QListWidget(m_documents);
}
...

Проблема, которую я не могу понять, связана с QListView, яне использую его в моем проекте.Существует только QListWidget, но когда я пытаюсь построить проект, возникают следующие ошибки:

qlistview.h: 194: ошибка: ISO C ++ запрещает объявление 'QListView' безвведите

qlistview.h: 194: ошибка: ожидается ',' или '...' перед '&' токеном

Также следующие странные ошибки:

qlistwidget.h: 308: ошибка: нет 'void QListWidget :: removeItemWidget (QListWidgetItem )' функция-член объявлена ​​в классе 'QListWidget '*

qlistwidget.h: 311: ошибка: нет' void QListWidget :: addItem (QListWidgetItem ) ', объявленная в классе' QListWidget '*

qlistwidget.h: 314: ошибка: нет 'QListWidgetItem Функция-член QListWidget :: itemAt (int, int) const' объявлена ​​в классе 'QListWidget' *

и т. Д.

Заранее спасибо.

UPD : я использую QtCreator 2.2.1 в Windows 7.

UPD2 :Версия Qt 4.7.1.

UPD3 : полный вывод

In file included from c:\QtSDK\Desktop\Qt\4.7.3\mingw\include\QtGui/QtGui:68,
                 from ..\my_project\/main_window.h:4,
                 from ..\my_project\main.cpp:2:
c:\QtSDK\Desktop\Qt\4.7.3\mingw\include\QtGui/qlistview.h:194: error: ISO C++ forbids declaration of 'QListView' with no type
c:\QtSDK\Desktop\Qt\4.7.3\mingw\include\QtGui/qlistview.h:194: error: expected ',' or '...' before '&' token
c:\QtSDK\Desktop\Qt\4.7.3\mingw\include\QtGui/qlistview.h:194: error: ISO C++ forbids declaration of 'QListView' with no type
c:\QtSDK\Desktop\Qt\4.7.3\mingw\include\QtGui/qlistview.h:194: error: ISO C++ forbids declaration of 'QListView' with no type
c:\QtSDK\Desktop\Qt\4.7.3\mingw\include\QtGui/qlistview.h:194: error: expected ';' before '&' token
In file included from c:\QtSDK\Desktop\Qt\4.7.3\mingw\include\QtGui/QtGui:69,
                 from ..\my_project\/main_window.h:4,
                 from ..\my_project\main.cpp:2:
c:\QtSDK\Desktop\Qt\4.7.3\mingw\include\QtGui/qlistwidget.h:202: error: redefinition of 'class QListWidget'
c:\QtSDK\Desktop\Qt\4.7.3\mingw\include\QtGui/qlistview.h:58: error: previous definition of 'class QListWidget'
c:\QtSDK\Desktop\Qt\4.7.3\mingw\include\QtGui/qlistwidget.h:308: error: no 'void QListWidget::removeItemWidget(QListWidgetItem*)' member function declared in class 'QListWidget'
c:\QtSDK\Desktop\Qt\4.7.3\mingw\include\QtGui/qlistwidget.h:311: error: no 'void QListWidget::addItem(QListWidgetItem*)' member function declared in class 'QListWidget'
c:\QtSDK\Desktop\Qt\4.7.3\mingw\include\QtGui/qlistwidget.h:314: error: no 'QListWidgetItem* QListWidget::itemAt(int, int) const' member function declared in class 'QListWidget'
c:\QtSDK\Desktop\Qt\4.7.3\mingw\include\QtGui/qlistwidget.h: In member function 'void QListWidgetItem::setSelected(bool)':
c:\QtSDK\Desktop\Qt\4.7.3\mingw\include\QtGui/qlistwidget.h:318: error: 'class QListWidget' has no member named 'setItemSelected'
c:\QtSDK\Desktop\Qt\4.7.3\mingw\include\QtGui/qlistwidget.h: In member function 'bool QListWidgetItem::isSelected() const':
c:\QtSDK\Desktop\Qt\4.7.3\mingw\include\QtGui/qlistwidget.h:321: error: 'class QListWidget' has no member named 'isItemSelected'
c:\QtSDK\Desktop\Qt\4.7.3\mingw\include\QtGui/qlistwidget.h: In member function 'void QListWidgetItem::setHidden(bool)':
c:\QtSDK\Desktop\Qt\4.7.3\mingw\include\QtGui/qlistwidget.h:324: error: 'class QListWidget' has no member named 'setItemHidden'
c:\QtSDK\Desktop\Qt\4.7.3\mingw\include\QtGui/qlistwidget.h: In member function 'bool QListWidgetItem::isHidden() const':
c:\QtSDK\Desktop\Qt\4.7.3\mingw\include\QtGui/qlistwidget.h:327: error: 'class QListWidget' has no member named 'isItemHidden'

Ответы [ 2 ]

2 голосов
/ 19 сентября 2011

Во-первых, вы также должны упомянуть версию qt, поскольку в данном случае это наиболее важно.

Это похоже на странную причуду компилятора или qt - я рекомендую сначала создать простейшую программу, где возникает проблема.Если это показано также в программе, как

#include <QtGui/QListWidget>
int main(int argc, char* argv[]){
    QListWidget* w = 0;
}

, то это некоторая проблема с заголовками qt компилятора - тогда ответ не может быть предоставлен из предоставленных данных.Если это работает, попробуйте медленно добавить другие элементы вашего кода в этот простой файл - скорее всего, в какой-то момент вы снова получите ту же ошибку - тогда вы будете знать, что последний добавленный фрагмент кода виновен.Может потребоваться дополнительное размышление, чтобы выяснить, как устранить проблему после ее обнаружения.

2 голосов
/ 19 сентября 2011

Следует отметить, что QListWidget наследуется от QListView, поэтому вы косвенно используете его.

Ошибка, которую вы получаете, выглядит так, будто вы просто пропускаете строку #include <QListWidget> в заголовочном файле.

Кроме того, это может быть то, что вам не хватает защиты #include в вашем заголовочном файле

#ifndef MYCLASS
#define MYCLASS

class MyClass { ... };

#endif

Если ваш заголовочный файл # включён более чем в один проект, это объясняет ошибки, которые вы видите.

...