2009-06-18 2 views
0

Ich bin dabei, Qt4 zu lernen und durch ihre Tutorials zu arbeiten.Qt menuBar() Fehler

In diesem Tutorial:

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

sie haben den folgenden Code:

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

, die den Compiler diesen Fehler zu werfen verursacht

 
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 

Wer weiß, wie ich kann das beheben?

[Bearbeiten] Hinzugefügt vollständige Fehlermeldung mit g ++

Antwort

0

Aus irgendeinem Grund wurde QMainWindow nicht richtig eingerichtet. Dies wurde behoben, indem der Basisklassenkonstruktor aufgerufen wurde.

+0

Was meinst du mit "nicht richtig einrichten"? Die Konstruktoren der Basisklassen werden immer vor den abgeleiteten Klassen aufgerufen. Klingt so, als hättest du die Vererbung nicht richtig deklariert und jetzt repariert. – ephemient

0

Sind Sie sicher, dass Sie von QMainWindow erben, haben Sie nicht erstellt oder alle Felder geerbt, die den Namen mocmenuBar, und Sie haben laufen Schatten könnte (oder hat qmake für Sie tun)?

Die mainwindow.cpp, mainwindow.h, main.cpp und menus.pro aus dem Beispiel nicht modifiziert, sollte gut funktionieren.

 
$ 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

Ich habe qmake es für mich laufen. 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 ++ machen - ICH. -ich/usr/include/qt4/QtCore -I/usr/einschliessen/qt4/QtGui -I/usr/include/qt4 -I. -ICH. -ICH. -o MainWindow.o MainWindow.cpp MainWindow.cpp: In Member-Funktion 'void MainWindow :: createMenus()': MainWindow.cpp: 56: Fehler: '((MainWindow *) this) -> MainWindow :: menuBar' kann nicht als Funktion verwendet werden .. [für jede Zeile wiederholen] .. make: *** [MainWindow.o] Fehler 1 – Scott

+0

Ich denke, Ephemient ist richtig Scott. Diese Fehlermeldung bedeutet, dass der Compiler "menuBar" für keine Funktion hält, was fast sicher bedeutet, dass Sie eine Variable, Mitglied oder lokal haben, die auch 'menuBar' genannt wird und die gleichnamige Funktion blockiert (shadowing). – quark