Archiv verlassen und diese Seite im Standarddesign anzeigen : kdevelop problem bei mehren dateien[c++]
tuxipuxi
22-09-2002, 12:04
hi,
ich wollte jetzt ein projekt kompilieren,das aus einer main.cpp ,einer lcdrange.h und lcdrange.cpp besteht(der code ist richtig,.h wurde auch inkludiert (der code is auch original von trolltech uebernommen)).
wenn ich kompiliere kommt die meldung:
"
cd .. && \
/bin/sh /home/lane/C++/qt4/admin/missing --run automake --gnu qt4/Makefile
cd .. && perl admin/am_edit qt4/Makefile.in
cd .. && \
CONFIG_HEADERS= CONFIG_LINKS= \
CONFIG_FILES=qt4/Makefile /bin/sh ./config.status
config.status: creating qt4/Makefile
source='main.cpp' object='main.o' libtool=no \
depfile='.deps/main.Po' tmpdepfile='.deps/main.TPo' \
depmode=gcc /bin/sh ../admin/depcomp \
g++ -DHAVE_CONFIG_H -I. -I. -I.. -I/usr/lib/qt3/include -I/usr/X11R6/include -DQT_THREAD_SUPPORT -D_REENTRANT -O2 -O0 -g3 -Wall -fno-exceptions -fno-check-new -c -o main.o `test -f main.cpp || echo './'`main.cpp
main.cpp: In method `MyWidget::MyWidget(QWidget * = 0, const char * = 0)':
main.cpp:34: `LCDRange' undeclared (first use this function)
main.cpp:34: (Each undeclared identifier is reported only once
main.cpp:34: for each function it appears in.)
main.cpp:34: `previous' undeclared (first use this function)
main.cpp:37: `lr' undeclared (first use this function)
main.cpp:37: parse error before `('
main.cpp:32: warning: unused variable `class QGrid * grid'
gmake: *** [main.o] Error 1
*** failed ***
" ...
so ein aehnlicher fehler kommt immer,wenn ich eine headerdatei benutze...habt ihr ne idee?
ciao lane
anda_skoa
22-09-2002, 12:10
Kannst du vielleicht main.cpp posten, bzw. als Attachment anhängen?
Ich würde sagen, dass dort ein include fehlt.
Ciao,
_
tuxipuxi
22-09-2002, 12:13
hi
main.cpp:
"
/************************************************** **************
**
** Qt tutorial 7
**
************************************************** **************/
#include <qapplication.h>
#include <qpushbutton.h>
#include <qlcdnumber.h>
#include <qfont.h>
#include <qvbox.h>
#include <qgrid.h>
#include "lcdrange.h"
class MyWidget : public QVBox
{
public:
MyWidget( QWidget *parent=0, const char *name=0 );
};
MyWidget::MyWidget( QWidget *parent, const char *name )
: QVBox( parent, name )
{
QPushButton *quit = new QPushButton( "Quit", this, "quit" );
quit->setFont( QFont( "Times", 18, QFont::Bold ) );
connect( quit, SIGNAL(clicked()), qApp, SLOT(quit()) );
QGrid *grid = new QGrid( 4, this );
LCDRange *previous = 0;
for( int r = 0 ; r < 4 ; r++ ) {
for( int c = 0 ; c < 4 ; c++ ) {
LCDRange* lr = new LCDRange( grid );
if ( previous )
connect( lr, SIGNAL(valueChanged(int)),
previous, SLOT(setValue(int)) );
previous = lr;
}
}
}
int main( int argc, char **argv )
{
QApplication a( argc, argv );
MyWidget w;
a.setMainWidget( &w );
w.show();
return a.exec();
}
"
is eigentlich inkludiert die .h
ciao lane
anda_skoa
22-09-2002, 12:48
Ja, stimmt.
Hmm, und LCDRange wird wirklich in lcdrange.h deklariert?
Und befindet sich im Verzeichnis von main.cpp?
Ciao,
_
tuxipuxi
22-09-2002, 12:50
die .h:
"
#ifndef LCDRANGE_H
#define LCDRANGE_H
#include <qvbox.h>
class QSlider;
class LCDRange : public QVBox
{
Q_OBJECT
public:
LCDRange( QWidget *parent=0, const char *name=0 );
int value() const;
public slots:
void setValue( int );
signals:
void valueChanged( int );
private:
QSlider *slider;
};
#endif // LCDRANGE_H
"
die lcdrange.cpp:
"
#include "lcdrange.h"
#include <qslider.h>
#include <qlcdnumber.h>
LCDRange::LCDRange( QWidget *parent, const char *name )
: QVBox( parent, name )
{
QLCDNumber *lcd = new QLCDNumber( 2, this, "lcd" );
slider = new QSlider( Horizontal, this, "slider" );
slider->setRange( 0, 99 );
slider->setValue( 0 );
connect( slider, SIGNAL(valueChanged(int)),
lcd, SLOT(display(int)) );
connect( slider, SIGNAL(valueChanged(int)),
SIGNAL(valueChanged(int)) );
}
int LCDRange::value() const
{
return slider->value();
}
void LCDRange::setValue( int value )
{
slider->setValue( value );
}
"
alles im selben verzeichnis
tuxipuxi
22-09-2002, 12:54
wird immer bunter...kompilieren klappt aber bei make kommt jetzt:
"
gmake all-recursive
gmake[1]: Entering directory `/home/lane/C++/qt4'
Making all in qt4
gmake[2]: Entering directory `/home/lane/C++/qt4/qt4'
Making all in docs
gmake[3]: Entering directory `/home/lane/C++/qt4/qt4/docs'
Making all in en
gmake[4]: Entering directory `/home/lane/C++/qt4/qt4/docs/en'
gmake[4]: Nothing to be done for `all'.
gmake[4]: Leaving directory `/home/lane/C++/qt4/qt4/docs/en'
gmake[4]: Entering directory `/home/lane/C++/qt4/qt4/docs'
gmake[4]: Nothing to be done for `all-am'.
gmake[4]: Leaving directory `/home/lane/C++/qt4/qt4/docs'
gmake[3]: Leaving directory `/home/lane/C++/qt4/qt4/docs'
gmake[3]: Entering directory `/home/lane/C++/qt4/qt4'
/bin/sh ../libtool --mode=link --tag=CXX g++ -O2 -O0 -g3 -Wall -fno-exceptions -fno-check-new -o qt4 -L/usr/X11R6/lib -L/usr/lib/qt3/lib lcdrange.o main.o -lqt-mt -lpng -lz -lm -lXext -lX11 -lresolv -lSM -lICE -lpthread -lresolv
g++ -O2 -O0 -g3 -Wall -fno-exceptions -fno-check-new -o qt4 lcdrange.o main.o -L/usr/X11R6/lib -L/usr/lib/qt3/lib -lqt-mt -lpng -lz -lm -lXext -lX11 -lSM -lICE -lpthread -lresolv
lcdrange.o: In function `LCDRange::LCDRange(QWidget *, char const *)':
/home/lane/C++/qt4/qt4/lcdrange.cpp:14: undefined reference to `LCDRange::QPaintDevice virtual table'
/home/lane/C++/qt4/qt4/lcdrange.cpp:14: undefined reference to `LCDRange virtual table'
collect2: ld returned 1 exit status
gmake[3]: Leaving directory `/home/lane/C++/qt4/qt4'
gmake[3]: *** [qt4] Error 1
gmake[2]: Leaving directory `/home/lane/C++/qt4/qt4'
gmake[1]: Leaving directory `/home/lane/C++/qt4'
gmake[2]: *** [all-recursive] Error 1
gmake[1]: *** [all-recursive] Error 1
gmake: *** [all] Error 2
*** failed ***
"
anda_skoa
22-09-2002, 13:00
Die Files sind in Ordnung.
hab sie gerade kompiliert.
#> g++ -c -o main.o main.cpp -I/usr/include/qt
#> g++ -c -o lcdrange.o lcdrange.cpp -I/usr/include/qt
Probier das mal (qt include an dein System anpassen)
Ciao,
_
anda_skoa
22-09-2002, 13:04
Original geschrieben von lane
/home/lane/C++/qt4/qt4/lcdrange.cpp:14: undefined reference to `LCDRange::QPaintDevice virtual table'
/home/lane/C++/qt4/qt4/lcdrange.cpp:14: undefined reference to `LCDRange virtual table'
Ok, das ist leicht :)
Das bedeutet, dass das moc File für lcdrange nicht gelinkt wurde.
Das passiert meistens, wenn man das Q_OBJECT Macro hinzufügt und vergisst, das Makefile neu zu erstellen.
mach ein touch Makefile.am im Verzeichnis.
Automake sollte dann das Makefile neu erstellen und die moc Regel einbauen.
Ciao,
_
tuxipuxi
22-09-2002, 13:13
hi,
ja,kompilieren tut er sie,aber wenn ich deine befehle mache,erstellt er nicht die executable,muss ich noch was anderes machen?(sorry,g++ befehle kenn ich nich)
danke schonmal
anda_skoa
22-09-2002, 13:16
Original geschrieben von lane
ja,kompilieren tut er sie,aber wenn ich deine befehle mache,erstellt er nicht die executable,muss ich noch was anderes machen?(sorry,g++ befehle kenn ich nich)
Ja, dazu muß man dann die Objectfiles linken.
Aber das ist ja jetzt eh hinfällig, nachdem das Kompilieren bei dir jetzt funktioniert.
(theoretisch ginge es mit
#> g++ -o progname main.o lcdrange.o -lqt
)
Ciao,
_
tuxipuxi
22-09-2002, 13:18
ich kuesse dir die fuesse :D :D ....vielen vielen dank *g* ...
es funzt nu.. **gg**
supi :)
ciao lane
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.