2009-06-18 5 views
0

Je suis en train d'apprendre Qt4 et de travailler sur leurs tutoriels.Qt menuBar() Erreur

Dans ce tutoriel:

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

ils ont le code suivant:

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

qui provoque le compilateur de lancer cette erreur

 
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 

Est-ce que quelqu'un sait comment je peut résoudre ce problème?

[Modifier] Ajouté un message d'erreur complète avec g ++

Répondre

0

QMainWindow n'était pas configuré correctement pour une raison quelconque. Cela a été résolu en appelant le constructeur de la classe de base.

+0

Que voulez-vous dire "ne pas se mettre en place correctement"? Les constructeurs des classes de base sont toujours appelés avant les classes dérivées. On dirait que vous ne déclarez pas l'héritage correctement, et maintenant le corrige. – ephemient

0

Êtes-vous sûr que vous êtes héritant de QMainWindow, vous n'avez pas créé ou hérité des champs qui pourraient shadow le nom menuBar, et que vous avez lancé moc (ou avait qmake le faire pour vous)?

Le mainwindow.cpp, mainwindow.h, main.cpp et menus.pro de l'exemple, non modifié, devrait fonctionner correctement.

 
$ 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

J'ai qmake courir pour moi. qmake -project qmake menus.pro faire 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 ++ - JE. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -JE. -JE. -o MainWindow.o MainWindow.cpp MainWindow.cpp: Dans la fonction membre 'void MainWindow :: createMenus()': MainWindow.cpp: 56: erreur: '((MainWindow *) this) -> MainWindow :: menuBar' ne peut pas être utilisé comme une fonction .. [répéter pour chaque ligne] .. make: *** [MainWindow.o] Erreur 1 – Scott

+0

Je pense que l'éphémère est juste Scott. Ce message d'erreur signifie que le compilateur pense que 'menuBar' n'est pas une fonction, ce qui signifie presque certainement que vous avez une variable, member ou local, qui est aussi appelée 'menuBar' et qui bloque la fonction du même nom. – quark