0

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: エラー: クラス 'QListWidget' で宣言された 'void QListWidget::removeItemWidget(QListWidgetItem )' メンバー関数がありません*

qlistwidget.h:311: エラー: クラス 'QListWidget' で宣言された 'void QListWidget::addItem(QListWidgetItem )' メンバー関数がありません*

qlistwidget.h:314: エラー:クラス 'QListWidget' で宣言された 'QListWidgetItem QListWidget::itemAt(int, int) const' メンバー関数がありません*

前もって感謝します。

UPD : Windows 7 で QtCreator 2.2.1 を使用しています。

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'
4

2 に答える 2

2

まず、qtバージョンについても言及する必要があります。この場合、これが最も重要です。

これは、コンパイラまたはqtの奇妙な癖のようです。私の推奨事項は、問題が発生する最も単純なプログラムを最初に作成することです。のようなプログラムでも表示される場合

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

次に、コンパイラのqtヘッダーに問題があります。提供されたデータから回答を提供することはできません。それが機能する場合は、コードの他の要素をこの単純なファイルにゆっくりと追加してみてください-おそらくある時点で同じエラーが再び発生する可能性があります-最後に追加されたコードが有罪であることがわかります。一度見つけたら問題を取り除く方法を理解するために、いくつかの追加の思考が必要になるかもしれません。

于 2011-09-19T00:26:06.710 に答える
2

QListWidget は QListView を継承しているため、間接的に使用していることに注意してください。

#include <QListWidget>あなたのエラーは、ヘッダー ファイルの行が単に欠落しているように見えます。

また、ヘッダー ファイルに #include ガードがない可能性もあります

#ifndef MYCLASS
#define MYCLASS

class MyClass { ... };

#endif

ヘッダー ファイルが複数のプロジェクトで #include されている場合、表示されているエラーの説明になります。

于 2011-09-18T22:00:01.680 に答える