• 7898阅读
  • 4回复

qtopia编译出错 undefined reference to .... [复制链接]

上一主题 下一主题
离线kelas
 
只看楼主 倒序阅读 楼主  发表于: 2010-10-25
— 本帖被 XChinux 执行加亮操作(2010-10-26) —
 make
make[1]: Entering directory `/qtopia/qtopia-free-2.2.0/qtopia/src/applications/mycall'g++ -c -pipe -DQWS -fno-exceptions -fno-rtti -Wall -W -g  -DQTOPIA_DATA_LINKING -DQCONFIG=\"qconfig-qpe.h\" -DQTOPIA_TARGET=\"mycall\" -DQTOPIA_TRTARGET=\"mycall\" -I/qtopia/qtopia-free-2.2.0/qtopia/mkspecs/qws/linux-generic-g++ -I. -I../../../include -I/qtopia/qt-2.3.10/include -I.ui/release-shared/ -I.moc/release-shared/ -o .obj/release-shared/mainwindow.o mainwindow.cpp
g++  -o mycall .obj/release-shared/dial.o .obj/release-shared/main.o .obj/release-shared/mainwindow.o .obj/release-shared/call.o .obj/release-shared/callover.o .obj/release-shared/callcoming.o .obj/release-shared/moc_dial.o .obj/release-shared/moc_mainwindow.o .obj/release-shared/moc_call.o   -lqtopia2 -lqtopia -lqpe -L/qtopia/qtopia-free-2.2.0/qtopia/lib -L/qtopia/qt-2.3.10/lib -lqte
.obj/release-shared/callover.o(.text+0x6b5): In function `Callover::closetheDialog()':/qtopia/qtopia-free-2.2.0/qtopia/src/applications/mycall/callover.cpp:58: undefined reference to `Callover::CalloverOperate(int)'
.obj/release-shared/callcoming.o(.text+0x27): In function `Callcoming::Callcoming[not-in-charge](QString, QWidget*, char const*, unsigned)':
/qtopia/qt-2.3.10/include/qstring.h:654: undefined reference to `vtable for Callcoming'
.obj/release-shared/callcoming.o(.text+0x33):/qtopia/qt-2.3.10/include/qstring.h:655:
undefined reference to `vtable for Callcoming'
.obj/release-shared/callcoming.o(.text+0xc9): In function `Callcoming::Callcoming[in-charge](QString, QWidget*, char const*, unsigned)':
/qtopia/qtopia-free-2.2.0/qtopia/src/applications/mycall/callcoming.cpp:8: undefined reference to `vtable for Callcoming'
.obj/release-shared/callcoming.o(.text+0xd5):/qtopia/qtopia-free-2.2.0/qtopia/src/applications/mycall/callcoming.cpp:8: undefined reference to `vtable for Callcoming'
.obj/release-shared/callcoming.o(.text+0x14f): In function `Callcoming::~Callcoming [not-in-charge]()':
/qtopia/qtopia-free-2.2.0/qtopia/src/applications/mycall/callcoming.cpp:16: undefined
reference to `vtable for Callcoming'
.obj/release-shared/callcoming.o(.text+0x15b):/qtopia/qtopia-free-2.2.0/qtopia/src/applications/mycall/callcoming.cpp:16: more undefined references to `vtable for Callcoming' follow
.obj/release-shared/callcoming.o(.text+0x52a): In function `Callcoming::init(QString)':
/qtopia/qtopia-free-2.2.0/qtopia/src/applications/mycall/callcoming.cpp:39: undefined
reference to `Callcoming::tr(char const*)'
.obj/release-shared/callcoming.o(.text+0x68b):/qtopia/qtopia-free-2.2.0/qtopia/src/applications/mycall/callcoming.cpp:50: undefined reference to `Callcoming::tr(char const*)'
.obj/release-shared/callcoming.o(.text+0x90f): In function `Callcoming::deal_answerbtn()':
/qtopia/qtopia-free-2.2.0/qtopia/src/applications/mycall/callcoming.cpp:68: undefined
reference to `Callcoming::ansoringOperate(int)'
.obj/release-shared/callcoming.o(.text+0x935): In function `Callcoming::deal_ignorebtn()':
/qtopia/qtopia-free-2.2.0/qtopia/src/applications/mycall/callcoming.cpp:74: undefined
reference to `Callcoming::ansoringOperate(int)'
collect2: ld returned 1 exit status
make[1]: *** [mycall] Error 1
make[1]: Leaving directory `/qtopia/qtopia-free-2.2.0/qtopia/src/applications/mycall'
make: *** [all] Error 2
本来四个界面编译通过,执行也没问题。后来又加了一个界面,模式基本都是一样的。为什么会出错
经常碰到这类undefined reference to `vtable for ...'的错误。一般都是什么原因呢,我的运行坏境是red hat9。





离线dbzhang800

只看该作者 1楼 发表于: 2010-10-25
是不是你添加了 Q_OBJECT ,但没有重新运行 qmake (也没有导致qmake会重新运行的动作)
离线kelas
只看该作者 2楼 发表于: 2010-10-25
回 1楼(dbzhang800) 的帖子
嘿嘿、谢谢~
但接着又是类似的问题
/qtopia/qtopia-free-2.2.0/qtopia/src/applications/mycall/callover.cpp:58: undefined reference to `Callover::CalloverOperate(int)'
collect2: ld returned 1 exit status
make[1]: *** [mycall] Error 1
make[1]: Leaving directory `/qtopia/qtopia-free-2.2.0/qtopia/src/applications/mycall'
make: *** [all] Error 2
离线kelas
只看该作者 3楼 发表于: 2010-10-25
为什么我编译一直出现类似的错误,怎么改。。。
-lqtopia2 -lqtopia -lqpe -L/qtopia/qtopia-free-2.2.0/qtopia/lib -L/qtopia/qt-2.3.10/lib -lqte
.obj/release-shared/callover.o(.text+0x6dd): In function `Callover::closethisDialog()':
/qtopia/qtopia-free-2.2.0/qtopia/src/applications/mycall/callover.cpp:58: undefined reference to `Callover::CalloverOperate(int)'
collect2: ld returned 1 exit status
make[1]: *** [mycall] Error 1
make[1]: Leaving directory `/qtopia/qtopia-free-2.2.0/qtopia/src/applications/mycall'
make: *** [all] Error 2

找到callover.cpp(58行)
        yesbtn=new QPushButton(this);
    yesbtn->setPixmap(QPixmap(QPEApplication::qpeDir()+ "pics/mycall/yes.png"));
    layout4->addMultiCellWidget(yesbtn,3,3,1,1);
    connect(yesbtn,SIGNAL(clicked()),this,SLOT(closethisDialog(void)));
......
void Callover::closethisDialog(void)
{
    emit(CalloverOperate(0));  //58行
       this->close();
}
在callover.h里面定义的这个信号
signals:
    void CalloverOperate(int);
发现如果把58行注释掉,则编译运行都可以,但点击button没反应,也就是说槽函数没有起作用,窗口也一直停在第四界面。
检查mycall.pro文件,.cpp和.h都包含进来了,再检查callover.cpp、callover.h头文件,基本都跟前面一样的,也没有什么可添加了,不知道哪里出错了?
离线kelas
只看该作者 4楼 发表于: 2010-10-27
回 3楼(kelas) 的帖子
找到原因了,原来是我以前改错的时候将Q_OBJECT注释掉了,所以连接到时候才出现了错误。
快速回复
限100 字节
 
上一个 下一个