SOS:undefined reference to `vtable for<class name>
-
wrote on 14 Jun 2018, 07:11 last edited by
I'm only one who use Qt in my company.....
I cast two days on this queston and can't do anything..
My Boss Is angry ....
Who can help me..... -
wrote on 14 Jun 2018, 07:15 last edited by
Delete the build folder and re-run qmake. your code is fine
-
wrote on 15 Jun 2018, 01:20 last edited by
-
I get more infomation by google...
I try puoduce Moc file by moc tools
moc doc.h -o Moc_doc.cpp
but system always tell me "F:\doc\Doc\Doc.h:1: Note: No relevant classes found. No output generated."
I change the encode of .h file by notepad++,whatever I use utf-8 or ansi,It doesn't work.
@qazaq408 Can you show your pro file?
-
wrote on 15 Jun 2018, 04:34 last edited by
#------------------------------------------------- # # Project created by QtCreator 2018-06-13T12:39:42 # #------------------------------------------------- QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = MocTest TEMPLATE = app # The following define makes your compiler emit warnings if you use # any feature of Qt which has been marked as deprecated (the exact warnings # depend on your compiler). Please consult the documentation of the # deprecated API in order to know how to port your code away from it. DEFINES += QT_DEPRECATED_WARNINGS # You can also make your code fail to compile if you use deprecated APIs. # In order to do so, uncomment the following line. # You can also select to disable deprecated APIs only up to a certain version of Qt. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += \ main.cpp \ MocTest.cpp HEADERS += \ MocTest.h
The .h and .cpp file one the 3th floor
-
#------------------------------------------------- # # Project created by QtCreator 2018-06-13T12:39:42 # #------------------------------------------------- QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = MocTest TEMPLATE = app # The following define makes your compiler emit warnings if you use # any feature of Qt which has been marked as deprecated (the exact warnings # depend on your compiler). Please consult the documentation of the # deprecated API in order to know how to port your code away from it. DEFINES += QT_DEPRECATED_WARNINGS # You can also make your code fail to compile if you use deprecated APIs. # In order to do so, uncomment the following line. # You can also select to disable deprecated APIs only up to a certain version of Qt. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += \ main.cpp \ MocTest.cpp HEADERS += \ MocTest.h
The .h and .cpp file one the 3th floor
@qazaq408 Does MocTest.* contain your Dialog class?
-
wrote on 15 Jun 2018, 04:44 last edited by
@jsulm
no,My class name "MocTest; and "MocTest" class inheriten QDialog
and I write class declaration inthe .h file,wirte class definition in .cpp file.h file
#ifndef DIALOG_H #define DIALOG_H #include <QDialog> class Dialog : public QDialog { Q_OBJECT public: Dialog(QWidget *parent = 0); ~Dialog(); }; #endif // DIALOG_H
.cpp file
#include "Dialog.h" Dialog::Dialog(QWidget *parent) : QDialog(parent) { } Dialog::~Dialog() { }
-
@jsulm
no,My class name "MocTest; and "MocTest" class inheriten QDialog
and I write class declaration inthe .h file,wirte class definition in .cpp file.h file
#ifndef DIALOG_H #define DIALOG_H #include <QDialog> class Dialog : public QDialog { Q_OBJECT public: Dialog(QWidget *parent = 0); ~Dialog(); }; #endif // DIALOG_H
.cpp file
#include "Dialog.h" Dialog::Dialog(QWidget *parent) : QDialog(parent) { } Dialog::~Dialog() { }
wrote on 15 Jun 2018, 04:46 last edited by@qazaq408 said in SOS:undefined reference to `vtable for<class name>:
@jsulm
no,My class name "MocTest; and "MocTest" class inheriten QDialog
and I write class declaration inthe .h file,wirte class definition in .cpp file.h file
#ifndef DIALOG_H #define DIALOG_H #include <QDialog> class MocTest : public QDialog { Q_OBJECT public: MocTest(QWidget *parent = 0); ~MocTest(); }; #endif // DIALOG_H
.cpp file
#include "MocTest.h" MocTest::MocTest(QWidget *parent) : QDialog(parent) { } MocTest::~MocTest() { }
-
@qazaq408 said in SOS:undefined reference to `vtable for<class name>:
@jsulm
no,My class name "MocTest; and "MocTest" class inheriten QDialog
and I write class declaration inthe .h file,wirte class definition in .cpp file.h file
#ifndef DIALOG_H #define DIALOG_H #include <QDialog> class MocTest : public QDialog { Q_OBJECT public: MocTest(QWidget *parent = 0); ~MocTest(); }; #endif // DIALOG_H
.cpp file
#include "MocTest.h" MocTest::MocTest(QWidget *parent) : QDialog(parent) { } MocTest::~MocTest() { }
@qazaq408 said in SOS:undefined reference to `vtable for<class name>:
somthing strange is going on, did you create the class files yourself? because the declaration guards are QtNorming conform and indicate file names ofdialog.h
anddialog.cpp
#ifndef DIALOG_H
#define DIALOG_Hyou didn't just write
SOURCES += MocTest.cpp
because you named your class MocTest, and the file itself is named dialog.cpp, right?
Just made a basic test program and works fine, as expected:
//*pro #------------------------------------------------- # # Project created by QtCreator 2018-06-15T07:01:09 # #------------------------------------------------- QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = MocTest TEMPLATE = app # The following define makes your compiler emit warnings if you use # any feature of Qt which has been marked as deprecated (the exact warnings # depend on your compiler). Please consult the documentation of the # deprecated API in order to know how to port your code away from it. DEFINES += QT_DEPRECATED_WARNINGS # You can also make your code fail to compile if you use deprecated APIs. # In order to do so, uncomment the following line. # You can also select to disable deprecated APIs only up to a certain version of Qt. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += \ main.cpp \ moctest.cpp HEADERS += \ mainwindow.h \ moctest.h
//main.cpp #include "moctest.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); MocTest test; test.show(); return a.exec(); }
//moctest.h #ifndef MOCTEST_H #define MOCTEST_H #include <QDialog> class MocTest : public QDialog { Q_OBJECT public: explicit MocTest(QDialog *parent = 0); }; #endif // MOCTEST_H
//MocTest.cpp #include "moctest.h" MocTest::MocTest(QDialog *parent) : QDialog(parent) { }
-
@qazaq408 said in SOS:undefined reference to `vtable for<class name>:
somthing strange is going on, did you create the class files yourself? because the declaration guards are QtNorming conform and indicate file names ofdialog.h
anddialog.cpp
#ifndef DIALOG_H
#define DIALOG_Hyou didn't just write
SOURCES += MocTest.cpp
because you named your class MocTest, and the file itself is named dialog.cpp, right?
Just made a basic test program and works fine, as expected:
//*pro #------------------------------------------------- # # Project created by QtCreator 2018-06-15T07:01:09 # #------------------------------------------------- QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = MocTest TEMPLATE = app # The following define makes your compiler emit warnings if you use # any feature of Qt which has been marked as deprecated (the exact warnings # depend on your compiler). Please consult the documentation of the # deprecated API in order to know how to port your code away from it. DEFINES += QT_DEPRECATED_WARNINGS # You can also make your code fail to compile if you use deprecated APIs. # In order to do so, uncomment the following line. # You can also select to disable deprecated APIs only up to a certain version of Qt. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += \ main.cpp \ moctest.cpp HEADERS += \ mainwindow.h \ moctest.h
//main.cpp #include "moctest.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); MocTest test; test.show(); return a.exec(); }
//moctest.h #ifndef MOCTEST_H #define MOCTEST_H #include <QDialog> class MocTest : public QDialog { Q_OBJECT public: explicit MocTest(QDialog *parent = 0); }; #endif // MOCTEST_H
//MocTest.cpp #include "moctest.h" MocTest::MocTest(QDialog *parent) : QDialog(parent) { }
-
@J.Hilk
I make a mistake when i reply...I'm in a hurry because my boss is kicking my ass....my class name "MocTest",it's inheriten QDialog,and "MocTest" class is writed in MocTest.h and MocTest,cpp
I have two suggestions for you:
- Create a completely new project from QtCreators wizards and see if you can compile it. Then add a dialog (also with the wizard) and see if it still works. If not, than something may be wrong with your setup.
- Upload your complete project somewhere so we can test it.
Regards
-
@qazaq408 said in SOS:undefined reference to `vtable for<class name>:
somthing strange is going on, did you create the class files yourself? because the declaration guards are QtNorming conform and indicate file names ofdialog.h
anddialog.cpp
#ifndef DIALOG_H
#define DIALOG_Hyou didn't just write
SOURCES += MocTest.cpp
because you named your class MocTest, and the file itself is named dialog.cpp, right?
Just made a basic test program and works fine, as expected:
//*pro #------------------------------------------------- # # Project created by QtCreator 2018-06-15T07:01:09 # #------------------------------------------------- QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = MocTest TEMPLATE = app # The following define makes your compiler emit warnings if you use # any feature of Qt which has been marked as deprecated (the exact warnings # depend on your compiler). Please consult the documentation of the # deprecated API in order to know how to port your code away from it. DEFINES += QT_DEPRECATED_WARNINGS # You can also make your code fail to compile if you use deprecated APIs. # In order to do so, uncomment the following line. # You can also select to disable deprecated APIs only up to a certain version of Qt. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += \ main.cpp \ moctest.cpp HEADERS += \ mainwindow.h \ moctest.h
//main.cpp #include "moctest.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); MocTest test; test.show(); return a.exec(); }
//moctest.h #ifndef MOCTEST_H #define MOCTEST_H #include <QDialog> class MocTest : public QDialog { Q_OBJECT public: explicit MocTest(QDialog *parent = 0); }; #endif // MOCTEST_H
//MocTest.cpp #include "moctest.h" MocTest::MocTest(QDialog *parent) : QDialog(parent) { }
wrote on 15 Jun 2018, 05:53 last edited by@J.Hilk
I guess that's is the point, MOC tools can't prduce moc*.cpp file
But I don't know why .
the almost answer in google is that the encode of file is wrong,qt need utf-8,but i change the encode of .h file by vs and notepad++, it still don't work... -
@J.Hilk
I guess that's is the point, MOC tools can't prduce moc*.cpp file
But I don't know why .
the almost answer in google is that the encode of file is wrong,qt need utf-8,but i change the encode of .h file by vs and notepad++, it still don't work...@qazaq408 said in SOS:undefined reference to `vtable for<class name>:
I guess that's is the point, MOC tools can't prduce moc*.cpp file
Then please do clean all build artefacts, and then compile your project. Paste the compile log here for analysis.
PS: Also make sure that there are no Makefile, *.moc, *.o and other generated files in your source directory! This will lead to the strangest effects possible.
-
@qazaq408 said in SOS:undefined reference to `vtable for<class name>:
I guess that's is the point, MOC tools can't prduce moc*.cpp file
Then please do clean all build artefacts, and then compile your project. Paste the compile log here for analysis.
PS: Also make sure that there are no Makefile, *.moc, *.o and other generated files in your source directory! This will lead to the strangest effects possible.
wrote on 15 Jun 2018, 06:14 last edited by@aha_1980
I had done this....
even I cpoy these three file (Moctst.h,MocTest.cpp,Main.cpp) to another dir,like E:/tkand use cmd.exe
/////
e:
cd ./tk
moc MocTest.h -o Moc_MocTest.cppthe system tell me .E:\tk\MocTest.h:1: Note: No relevant classes found. No output generated....
-
@aha_1980
I had done this....
even I cpoy these three file (Moctst.h,MocTest.cpp,Main.cpp) to another dir,like E:/tkand use cmd.exe
/////
e:
cd ./tk
moc MocTest.h -o Moc_MocTest.cppthe system tell me .E:\tk\MocTest.h:1: Note: No relevant classes found. No output generated....
@qazaq408 Don't copy anything, just create a new project and add there a new dialog and see whether it works.
-
@qazaq408 Don't copy anything, just create a new project and add there a new dialog and see whether it works.
-
@jsulm
if I create a new object that has a new dialog,(I don't revise anything and the class with Q_OBJECT marco),and make,
system tell me
and if i delete Q_OBJECT marco,it works ,but still has a question
- Restart your PC
- Open Qt Creator
- In the "Welcome" screen, click "Examples"
- Search for the "Address Book Example"
- Try to run this example
What do you see?
-
wrote on 15 Jun 2018, 08:16 last edited by
I take it...my company systm file are encrypted so that add some question when Qt produce .o file. I run win7 in the vritulBox and it's work!!!!!
Thank brother Chun,
Thank god
Thank everyone who help me or not,thank you cost so much time to answer my question.thank you!!
18/26