SOS:undefined reference to `vtable for<class name>
-
#------------------------------------------------- # # 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
-
@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() { }
@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) { }
@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.
@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.
-
@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
-
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!!