Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. SOS:undefined reference to `vtable for<class name>
Forum Updated to NodeBB v4.3 + New Features

SOS:undefined reference to `vtable for<class name>

Scheduled Pinned Locked Moved Solved General and Desktop
26 Posts 6 Posters 11.1k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • qazaq408Q qazaq408

    @jsulm
    If I delete Q_OBJECT marco,the programme can run,but QtCreator has a question

    "D:\vbox\untitled\Dialog.h:1: Note: No relevant classes found. No output generated."

    I can sure the encode is UTF-8

    jsulmJ Offline
    jsulmJ Offline
    jsulm
    Lifetime Qt Champion
    wrote on last edited by
    #5

    @qazaq408 "New File Or Project->choose Qt Widgets Application" - I guess you mean "C++ class" not "Qt Widgets Application" or how did you add the dialog to your application?

    https://forum.qt.io/topic/113070/qt-code-of-conduct

    qazaq408Q 1 Reply Last reply
    0
    • jsulmJ jsulm

      @qazaq408 "New File Or Project->choose Qt Widgets Application" - I guess you mean "C++ class" not "Qt Widgets Application" or how did you add the dialog to your application?

      qazaq408Q Offline
      qazaq408Q Offline
      qazaq408
      wrote on last edited by
      #6

      @jsulm
      I can sure I choose Qt Widgets Application...and I also add dialog to my app
      if not ,it can't work (after delete Q_OBJECT marco).

      jsulmJ 1 Reply Last reply
      0
      • qazaq408Q qazaq408

        @jsulm
        I can sure I choose Qt Widgets Application...and I also add dialog to my app
        if not ,it can't work (after delete Q_OBJECT marco).

        jsulmJ Offline
        jsulmJ Offline
        jsulm
        Lifetime Qt Champion
        wrote on last edited by
        #7

        @qazaq408 But how did you add the Dialog class? Manually?

        https://forum.qt.io/topic/113070/qt-code-of-conduct

        qazaq408Q 1 Reply Last reply
        0
        • jsulmJ jsulm

          @qazaq408 But how did you add the Dialog class? Manually?

          qazaq408Q Offline
          qazaq408Q Offline
          qazaq408
          wrote on last edited by
          #8

          @jsulm
          alt text
          alt text
          alt text
          alt text

          1 Reply Last reply
          0
          • qazaq408Q Offline
            qazaq408Q Offline
            qazaq408
            wrote on last edited by
            #9

            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.....

            1 Reply Last reply
            0
            • VRoninV Offline
              VRoninV Offline
              VRonin
              wrote on last edited by
              #10

              Delete the build folder and re-run qmake. your code is fine

              "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
              ~Napoleon Bonaparte

              On a crusade to banish setIndexWidget() from the holy land of Qt

              1 Reply Last reply
              5
              • qazaq408Q Offline
                qazaq408Q Offline
                qazaq408
                wrote on last edited by
                #11

                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.
                alt text

                jsulmJ 1 Reply Last reply
                0
                • qazaq408Q qazaq408

                  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.
                  alt text

                  jsulmJ Offline
                  jsulmJ Offline
                  jsulm
                  Lifetime Qt Champion
                  wrote on last edited by
                  #12

                  @qazaq408 Can you show your pro file?

                  https://forum.qt.io/topic/113070/qt-code-of-conduct

                  qazaq408Q 1 Reply Last reply
                  0
                  • jsulmJ jsulm

                    @qazaq408 Can you show your pro file?

                    qazaq408Q Offline
                    qazaq408Q Offline
                    qazaq408
                    wrote on last edited by
                    #13

                    @jsulm

                    #-------------------------------------------------
                    #
                    # 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

                    jsulmJ 1 Reply Last reply
                    0
                    • qazaq408Q qazaq408

                      @jsulm

                      #-------------------------------------------------
                      #
                      # 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

                      jsulmJ Offline
                      jsulmJ Offline
                      jsulm
                      Lifetime Qt Champion
                      wrote on last edited by
                      #14

                      @qazaq408 Does MocTest.* contain your Dialog class?

                      https://forum.qt.io/topic/113070/qt-code-of-conduct

                      qazaq408Q 1 Reply Last reply
                      0
                      • jsulmJ jsulm

                        @qazaq408 Does MocTest.* contain your Dialog class?

                        qazaq408Q Offline
                        qazaq408Q Offline
                        qazaq408
                        wrote on last edited by
                        #15

                        @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()
                        {
                        
                        }
                        
                        qazaq408Q 1 Reply Last reply
                        0
                        • qazaq408Q qazaq408

                          @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()
                          {
                          
                          }
                          
                          qazaq408Q Offline
                          qazaq408Q Offline
                          qazaq408
                          wrote on last edited by
                          #16

                          @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()
                          {
                          
                          }
                          
                          J.HilkJ 1 Reply Last reply
                          0
                          • qazaq408Q qazaq408

                            @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()
                            {
                            
                            }
                            
                            J.HilkJ Offline
                            J.HilkJ Offline
                            J.Hilk
                            Moderators
                            wrote on last edited by
                            #17

                            @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 of dialog.h and dialog.cpp

                            #ifndef DIALOG_H
                            #define DIALOG_H

                            you 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)
                            {
                            
                            }
                            
                            

                            Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                            Q: What's that?
                            A: It's blue light.
                            Q: What does it do?
                            A: It turns blue.

                            qazaq408Q 2 Replies Last reply
                            1
                            • J.HilkJ J.Hilk

                              @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 of dialog.h and dialog.cpp

                              #ifndef DIALOG_H
                              #define DIALOG_H

                              you 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)
                              {
                              
                              }
                              
                              
                              qazaq408Q Offline
                              qazaq408Q Offline
                              qazaq408
                              wrote on last edited by
                              #18

                              @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

                              aha_1980A 1 Reply Last reply
                              0
                              • qazaq408Q qazaq408

                                @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

                                aha_1980A Offline
                                aha_1980A Offline
                                aha_1980
                                Lifetime Qt Champion
                                wrote on last edited by
                                #19

                                @qazaq408

                                I have two suggestions for you:

                                1. 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.
                                2. Upload your complete project somewhere so we can test it.

                                Regards

                                Qt has to stay free or it will die.

                                1 Reply Last reply
                                0
                                • J.HilkJ J.Hilk

                                  @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 of dialog.h and dialog.cpp

                                  #ifndef DIALOG_H
                                  #define DIALOG_H

                                  you 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)
                                  {
                                  
                                  }
                                  
                                  
                                  qazaq408Q Offline
                                  qazaq408Q Offline
                                  qazaq408
                                  wrote on last edited by
                                  #20

                                  @J.Hilk
                                  I guess that's is the point, MOC tools can't prduce moc*.cpp file
                                  alt text
                                  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...

                                  aha_1980A 1 Reply Last reply
                                  0
                                  • qazaq408Q qazaq408

                                    @J.Hilk
                                    I guess that's is the point, MOC tools can't prduce moc*.cpp file
                                    alt text
                                    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...

                                    aha_1980A Offline
                                    aha_1980A Offline
                                    aha_1980
                                    Lifetime Qt Champion
                                    wrote on last edited by aha_1980
                                    #21

                                    @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.

                                    Qt has to stay free or it will die.

                                    qazaq408Q 1 Reply Last reply
                                    0
                                    • aha_1980A aha_1980

                                      @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.

                                      qazaq408Q Offline
                                      qazaq408Q Offline
                                      qazaq408
                                      wrote on last edited by
                                      #22

                                      @aha_1980
                                      I had done this....
                                      even I cpoy these three file (Moctst.h,MocTest.cpp,Main.cpp) to another dir,like E:/tk

                                      and use cmd.exe
                                      /////
                                      e:
                                      cd ./tk
                                      moc MocTest.h -o Moc_MocTest.cpp

                                      the system tell me .E:\tk\MocTest.h:1: Note: No relevant classes found. No output generated....

                                      jsulmJ 1 Reply Last reply
                                      0
                                      • qazaq408Q qazaq408

                                        @aha_1980
                                        I had done this....
                                        even I cpoy these three file (Moctst.h,MocTest.cpp,Main.cpp) to another dir,like E:/tk

                                        and use cmd.exe
                                        /////
                                        e:
                                        cd ./tk
                                        moc MocTest.h -o Moc_MocTest.cpp

                                        the system tell me .E:\tk\MocTest.h:1: Note: No relevant classes found. No output generated....

                                        jsulmJ Offline
                                        jsulmJ Offline
                                        jsulm
                                        Lifetime Qt Champion
                                        wrote on last edited by
                                        #23

                                        @qazaq408 Don't copy anything, just create a new project and add there a new dialog and see whether it works.

                                        https://forum.qt.io/topic/113070/qt-code-of-conduct

                                        qazaq408Q 1 Reply Last reply
                                        0
                                        • jsulmJ jsulm

                                          @qazaq408 Don't copy anything, just create a new project and add there a new dialog and see whether it works.

                                          qazaq408Q Offline
                                          qazaq408Q Offline
                                          qazaq408
                                          wrote on last edited by JKSH
                                          #24

                                          @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
                                          alt text

                                          and if i delete Q_OBJECT marco,it works ,but still has a question
                                          alt text

                                          JKSHJ 1 Reply Last reply
                                          0

                                          • Login

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • Users
                                          • Groups
                                          • Search
                                          • Get Qt Extensions
                                          • Unsolved