Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Special Interest Groups
  3. C++ Gurus
  4. C++ - Can't access function in another class
Forum Updated to NodeBB v4.3 + New Features

C++ - Can't access function in another class

Scheduled Pinned Locked Moved Unsolved C++ Gurus
18 Posts 6 Posters 4.0k Views 4 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.
  • M mad-hatter

    @koahnig

    Is the associated source file included in the .pro file?

    Yes.

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

    @mad-hatter please clean your project (worst case: delete build directory), run qmake and build again.

    Qt has to stay free or it will die.

    1 Reply Last reply
    1
    • SGaistS Offline
      SGaistS Offline
      SGaist
      Lifetime Qt Champion
      wrote on last edited by
      #5

      Hi,

      Usually, vtable related errors comes after you added or remove the Q_OBJECT macro. Either re-run qmake by hand or do as @aha_1980 suggested: nuke the build folder and re-build.

      Interested in AI ? www.idiap.ch
      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

      1 Reply Last reply
      2
      • M Offline
        M Offline
        mad-hatter
        wrote on last edited by
        #6

        Hello,

        Thanks for all your repies.

        Deleted build folder
        Deleted *.pro.usr
        Ran clean
        Ran Qmake
        Ran Rebuild

        Deleted build folder
        Deleted *.pro.usr
        Ran clean
        Ran Qmake
        Ran Build

        same errors,

        Is it something to do with virtual?
        virtual ~QG_CommandEdit()=default;

        Regards

        1 Reply Last reply
        0
        • SGaistS Offline
          SGaistS Offline
          SGaist
          Lifetime Qt Champion
          wrote on last edited by
          #7

          Might be a silly question but did you implement your class constructor ?

          Interested in AI ? www.idiap.ch
          Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

          1 Reply Last reply
          2
          • M Offline
            M Offline
            mad-hatter
            wrote on last edited by
            #8

            @SGaist
            A silly answer, I don't know about class constructors in this context.

            jsulmJ 1 Reply Last reply
            0
            • M mad-hatter

              @SGaist
              A silly answer, I don't know about class constructors in this context.

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

              @mad-hatter said in C++ - Can't access function in another class:

              I don't know about class constructors in this context

              Then you should learn.
              Do you have this in your cpp file:

              QG_CommandEdit::QG_CommandEdit(QWidget* parent=0)
              {
              }
              

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

              1 Reply Last reply
              3
              • M Offline
                M Offline
                mad-hatter
                wrote on last edited by
                #10

                Hello,

                Thanks for your response.
                I can't change this file as its part of an open source project.

                @jsulm
                This is in the qg_commandedit.cpp file.

                QG_CommandEdit::QG_CommandEdit(QWidget* parent)
                        : QLineEdit(parent)
                        , keycode_mode(false)
                        , relative_ray("none")
                        , calculator_mode(false)
                
                {
                    setStyleSheet("selection-color: white; selection-background-color: green;");
                    setFrame(false);
                    setFocusPolicy(Qt::StrongFocus);
                }
                

                Regards

                K 1 Reply Last reply
                0
                • M mad-hatter

                  Hello,

                  Thanks for your response.
                  I can't change this file as its part of an open source project.

                  @jsulm
                  This is in the qg_commandedit.cpp file.

                  QG_CommandEdit::QG_CommandEdit(QWidget* parent)
                          : QLineEdit(parent)
                          , keycode_mode(false)
                          , relative_ray("none")
                          , calculator_mode(false)
                  
                  {
                      setStyleSheet("selection-color: white; selection-background-color: green;");
                      setFrame(false);
                      setFocusPolicy(Qt::StrongFocus);
                  }
                  

                  Regards

                  K Offline
                  K Offline
                  koahnig
                  wrote on last edited by
                  #11

                  @mad-hatter

                  Show the .pro or .pri file where the source "qg_commandedit.cpp" is included.

                  Vote the answer(s) that helped you to solve your issue(s)

                  1 Reply Last reply
                  0
                  • M Offline
                    M Offline
                    mad-hatter
                    wrote on last edited by
                    #12

                    @koahnig

                    Pro file

                    TEMPLATE = app
                    
                    DISABLE_POSTSCRIPT = false
                    
                    #uncomment to enable a Debugging menu entry for basic unit testing
                    #DEFINES += LC_DEBUGGING
                    
                    DEFINES += DWGSUPPORT
                    DEFINES -= JWW_WRITE_SUPPORT
                    
                    LC_VERSION="2.2.0-alpha"
                    VERSION=$${LC_VERSION}
                    
                    # Store intermedia stuff somewhere else
                    GENERATED_DIR = ../../generated/librecad
                    # Use common project definitions.
                    include(../../common.pri)
                    include(./boost.pri)
                    include(./muparser.pri)
                    
                    CONFIG += qt \
                        warn_on \
                        link_prl \
                        verbose \
                        depend_includepath
                    
                    QT += widgets printsupport
                    CONFIG += c++11
                    *-g++ {
                        QMAKE_CXXFLAGS += -fext-numeric-literals
                    }
                    
                    GEN_LIB_DIR = ../../generated/lib
                    PRE_TARGETDEPS += $$GEN_LIB_DIR/libdxfrw.a \
                    		$$GEN_LIB_DIR/libjwwlib.a
                    
                    DESTDIR = $${INSTALLDIR}
                    
                    # Make translations at the end of the process
                    unix {
                        LC_VERSION=$$system([ "$(which git)x" != "x" -a -d ../../.git ] && echo "$(git describe --tags)" || echo "$${LC_VERSION}")
                    
                        macx {
                            TARGET = LibreCAD
                            VERSION=$$system(echo "$${LC_VERSION}" | sed -e 's/\-.*//g')
                            QMAKE_INFO_PLIST = Info.plist.app
                            DEFINES += QC_APPDIR="\"LibreCAD\""
                            ICON = ../res/main/librecad.icns
                            contains(DISABLE_POSTSCRIPT, false) {
                                QMAKE_POST_LINK = /bin/sh $$_PRO_FILE_PWD_/../../scripts/postprocess-osx.sh $$OUT_PWD/$${DESTDIR}/$${TARGET}.app/ $$[QT_INSTALL_BINS];
                                QMAKE_POST_LINK += /usr/libexec/PlistBuddy -c \"Set :CFBundleGetInfoString string $${TARGET} $${LC_VERSION}\" $$OUT_PWD/$${DESTDIR}/$${TARGET}.app/Contents/Info.plist;
                            }
                        }
                        else {
                            TARGET = librecad
                            DEFINES += QC_APPDIR="\"librecad\""
                            RC_FILE = ../res/main/librecad.icns
                            contains(DISABLE_POSTSCRIPT, false) {
                                QMAKE_POST_LINK = cd $$_PRO_FILE_PWD_/../.. && scripts/postprocess-unix.sh
                            }
                        }
                    }
                    win32 {
                        TARGET = LibreCAD
                        DEFINES += QC_APPDIR="\"LibreCAD\""
                    
                        # add MSYSGIT_DIR = PathToGitBinFolder (without quotes) in custom.pro file, for commit hash in about dialog
                        !isEmpty( MSYSGIT_DIR ) {
                            LC_VERSION = $$system( \"$$MSYSGIT_DIR/git.exe\" describe --tags || echo "$${LC_VERSION}")
                        }
                    
                        RC_FILE = ../res/main/librecad.rc
                        contains(DISABLE_POSTSCRIPT, false) {
                            QMAKE_POST_LINK = "$$_PRO_FILE_PWD_/../../scripts/postprocess-win.bat" $$LC_VERSION
                        }
                    }
                    
                    DEFINES += LC_VERSION=\"$$LC_VERSION\"
                    
                    # Additional libraries to load
                    LIBS += -L../../generated/lib  \
                        -ldxfrw \
                        -ljwwlib
                    
                    INCLUDEPATH += \
                    HEADERS += ui/lc_actionfactory.h \
                        ....
                        ui/qg_commandedit.h \
                        ... 
                    SOURCES += ui/lc_actionfactory.cpp \
                        ...
                        ui/qg_commandedit.cpp \
                        ...
                    
                    1 Reply Last reply
                    0
                    • sierdzioS Offline
                      sierdzioS Offline
                      sierdzio
                      Moderators
                      wrote on last edited by
                      #13

                      @mad-hatter said in C++ - Can't access function in another class:

                      INCLUDEPATH +=
                      HEADERS += ui/lc_actionfactory.h \

                      Add a newline between these lines! Or rather, remove the INCLUDEPATH entirely.

                      (Z(:^

                      1 Reply Last reply
                      1
                      • M Offline
                        M Offline
                        mad-hatter
                        wrote on last edited by
                        #14

                        @sierdzio

                        Thanks for your reply.
                        I don't want to alter the pro file as it belongs to an open source project that works as it is.

                        Regards

                        1 Reply Last reply
                        0
                        • sierdzioS Offline
                          sierdzioS Offline
                          sierdzio
                          Moderators
                          wrote on last edited by
                          #15

                          It is a bug, at least tell them to fix it if you don't want to do it yourself. If a project is open source, by the way, you do have all the rights to do that modification on your own.

                          (Z(:^

                          1 Reply Last reply
                          4
                          • M Offline
                            M Offline
                            mad-hatter
                            wrote on last edited by
                            #16

                            Hello,

                            @sierdzio

                            INCLUDEPATH +=
                            HEADERS += ui/lc_actionfactory.h \

                            I'm sorry, ' INCLUDEPATH += ' should not be there, its a copy and paste error on my part.

                            Regards

                            1 Reply Last reply
                            0
                            • M Offline
                              M Offline
                              mad-hatter
                              wrote on last edited by
                              #17

                              Hello,

                              I've changed the code and I am left with one error now.
                              Is there something I should add in the header file?
                              Help please!

                              Regards

                              QG_CommandEdit *inst = nullptr;
                              inst->QG_CommandEdit::readCommandFile( where ); //line 248
                              
                              error: undefined reference to `QG_CommandEdit::readCommandFile(QString const&)' // line 248
                              
                              aha_1980A 1 Reply Last reply
                              0
                              • M mad-hatter

                                Hello,

                                I've changed the code and I am left with one error now.
                                Is there something I should add in the header file?
                                Help please!

                                Regards

                                QG_CommandEdit *inst = nullptr;
                                inst->QG_CommandEdit::readCommandFile( where ); //line 248
                                
                                error: undefined reference to `QG_CommandEdit::readCommandFile(QString const&)' // line 248
                                
                                aha_1980A Offline
                                aha_1980A Offline
                                aha_1980
                                Lifetime Qt Champion
                                wrote on last edited by aha_1980
                                #18

                                Hi @mad-hatter

                                Is there something I should add in the header file?

                                That would help to resolve compile errors, when the compiler cannot find the definition of a function.

                                Linker errors mean, the linker cannot find the implementation of the function.

                                Usually this means either the implementation is missing in your source file or you have it in a source file that is not compiled/linked.

                                Regards

                                Qt has to stay free or it will die.

                                1 Reply Last reply
                                3

                                • Login

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