2009-06-18 5 views
0

私はQt4を学び、チュートリアルを進めています。このチュートリアルではQt menuBar()Error

http://doc.trolltech.com/4.5/mainwindows-menus-mainwindow-cpp.html

彼らは次のコードを持っている:

fileMenu = menuBar()->addMenu(tr("&File")); 

このエラー

 
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -I. -o main.o main.cpp 
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -I. -o MainWindow.o MainWindow.cpp 
MainWindow.cpp: In member function ‘void MainWindow::createMenus()’: 
MainWindow.cpp:56: error: ‘((MainWindow*)this)->MainWindow::menuBar’ cannot be used as a function 
MainWindow.cpp:61: error: ‘((MainWindow*)this)->MainWindow::menuBar’ cannot be used as a function 
make: *** [MainWindow.o] Error 1 

をスローするようにコンパイラになり、誰もがどのように私を知っていますがこれを修正できますか?

[編集]グラムで完全なエラーメッセージを追加しました++

答えて

0

何らかの理由でQMainWindowが正しくセットアップされませんでした。これは、基本クラスのコンストラクタを呼び出すことで修正されました。

+0

「正しくセットアップしていない」とはどういう意味ですか?基本クラスのコンストラクタは、派生クラスの前に常に呼び出されます。あなたが継承を正しく宣言していなかったように聞こえて、それを修正しました。 – ephemient

0

あなたがQMainWindowから継承していることを確認されており、あなたが作成したか、継承された名前menuBarをシャドウ可能性のあるすべてのフィールドを、そしてあなたは(mocを実行してきましたしていませんあなたのためにqmakeを持っていましたか?)

mainwindow.cpp,mainwindow.hmain.cppmenus.proを変更しない場合は正常に動作するはずです。

 
$ cd examples/mainwindows/menus/ 
$ ls 
main.cpp mainwindow.cpp mainwindow.h menus.pro 
$ qmake 
$ make 
g++ -c -pipe -g -O2 -mtune=native -pipe -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -o mainwindow.o mainwindow.cpp 
g++ -c -pipe -g -O2 -mtune=native -pipe -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -o main.o main.cpp 
/usr/bin/moc -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. mainwindow.h -o moc_mainwindow.cpp 
g++ -c -pipe -g -O2 -mtune=native -pipe -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -o moc_mainwindow.o moc_mainwindow.cpp 
g++ -Wl,--as-needed -Wl,--hash-style=both -o menus mainwindow.o main.o moc_mainwindow.o -L/usr/lib64/qt4 -lQtGui -L/usr/lib64 -L/usr/lib64/qt4 -L/usr/X11R6/lib64 -pthread -lpng -lfreetype -lgobject-2.0 -lSM -lICE -pthread -pthread -lXrender -lXrandr -lXinerama -lfontconfig -lXext -lX11 -lQtCore -lz -lm -pthread -lgthread-2.0 -lrt -lglib-2.0 -ldl -lpthread 
$ ls -F 
Makefile main.o   mainwindow.h menus*  moc_mainwindow.cpp 
main.cpp mainwindow.cpp mainwindow.o menus.pro moc_mainwindow.o 
+0

私はqmakeを使っています。 qmakeの-project qmakeをmenus.pro作る G ++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -Iは、/ usr/share/Qt4を/ mkspecs/linuxの-G ++ - 私。 -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -Iを指定します。 -私。 -私。 MainWindow.cpp:56:error: '((MainWindow *)this) - > MainWindow :: menuBar' - > MainWindow.cpp:56: 'MainWindow.cpp:メンバ関数'関数として使用することはできません .. [各行の繰り返し] .. make:*** [MainWindow.o] Error 1 – Scott

+0

私はephemientが正しいスコットだと思います。このエラーメッセージは、 'menuBar'が関数ではなく、 'menuBar'とも呼ばれる変数、メンバまたはローカルを持っていることを意味し、同じ名前の関数をブロック(シャドーイング)しているとコンパイラが判断したことを意味します。 – quark

関連する問題