Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

undefined reference to 'vtable for Firs/SecondClass'



  • I see the others topics about this problem but can't find something what can help me. I create the console aplication and try to compile but have this error. This is code :

    #include <QCoreApplication>
    #include <iostream>
    
    using namespace std;
    
    
    class FirstClass : public QObject{  //first class         (in this line error)
        Q_OBJECT
    private:
        int x;                        
    public:
        virtual ~FirstClass() {};      //the guy from stackoverflov say that this is can help  (in this line error)
    public slots:
        void change(){    //add 1 to x and if x = 4 write message to console 
            x++;
    
            if (x == 4) emit xEqu4();
        }
    signals:
        void xEqu4();       
    };
    
    class SecondClass : public QObject{  //second class   (in this line error)
      Q_OBJECT
    public:
        virtual ~SecondClass() {}    //(in this line error)
        void Work(){                  
            char c;
            for (int x = 0; x < 6 ; x++){           //you write 'g' and after 4 'g' will be the message 
            cout << "Write 'g' please" << endl;
            cin >> c;
            if (c == 'g') emit ch();//(in this line error)
            }
        }
    public slots:
        void goodbye(){
            cout << "Goodbye!!!" << endl;  //this is message
        }
    signals:
        void ch();
    };
    
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
    
        FirstClass f;
        SecondClass s;
    
        QObject::connect(&s, SIGNAL(ch()),
                         &f, SLOT(change()));
        QObject::connect(&f, SIGNAL(xEqu4()),
                         &s, SLOT(goodbye()));
    
        s.Work();
    
        return a.exec();
    }
    
    

    And a .pro file if you need it, i didn`t toch it:

    QT -= gui
    
    CONFIG += c++11 console
    CONFIG -= app_bundle
    
    
    # The following define makes your compiler emit warnings if you use
    # any feature of Qt which as been marked 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
    
    

    How to solwe this problem?



  • You can't have multiple Q_OBJECT macros in the same file, moc can't handle it. move the two classes in separate header files


Log in to reply