Important: Please read the Qt Code of Conduct -

[SOLVED] Can't add custom class!

  • Hi all,
    I cannot find why I get this error:

    @hid_pnp.obj:-1: error: LNK2001: unresolved external symbol "public: bool __thiscall CHexManager::LoadHexFile(void)" (?LoadHexFile@CHexManager@@QAE_NXZ)@

    Here is my CHexManager class header
    @#ifndef HEX_H
    #define HEX_H

    #pragma once
    #include "stdio.h"
    #include <QObject>

    typedef struct
    unsigned char RecDataLen;
    unsigned int Address;
    unsigned int MaxAddress;
    unsigned int MinAddress;
    unsigned char RecType;
    unsigned char* Data;
    unsigned char CheckSum;
    unsigned int ExtSegAddress;
    unsigned int ExtLinAddress;

    // Hex Manager class
    class CHexManager

    unsigned int HexTotalLines;
    unsigned int HexCurrLineNo;
    bool LoadHexFile(void);
    HexFilePtr = NULL;
    // If hex file is open close it.

    QString HexFilePath;
    FILE *HexFilePtr;


    #endif // HEX_H

    and source

    #include "hex.h"

    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = FILE;

    // Virtual Flash.
    #define KB (1024)
    #define MB (KB*KB)

    // 5 MB flash
    static unsigned char VirtualFlash[5*MB];

    #define BOOT_SECTOR_BEGIN 0x7FC000

    #define DATA_RECORD 0
    #define END_OF_FILE_RECORD 1
    #define EXT_SEG_ADRS_RECORD 2
    #define EXT_LIN_ADRS_RECORD 4


    • Loads hex file

    • \param

    • \param

    • \param

    • \return true if hex file loads successfully
      bool CHexManager::LoadHexFile(void)
      char HexRec[255];

      HexFilePath = fileDialog.GetPathName();

      // Open file
      HexFilePtr = fopen(HexFilePath, "r");

      if(HexFilePtr == NULL)
      // Failed to open hex file.
      return false;

       HexTotalLines = 0;
           fgets(HexRec, sizeof(HexRec), HexFilePtr);


      return true;

    In my MainWindow.h file I have declared in the public section:
    @ CHexManager HexManager; //load Hex manager class@

    and in my MainWindow.c file.. if I try to run @HexManager.LoadHexFile();@

    I get the error.

    What am I doing wrong??

  • I think I had the issue you are having before.
    I ended up removing my build folder, cleaned the project, then rebuilt it and the linkage error went away.

  • Have you added the hex.cpp file to your project?

  • Yes.. hex.cpp is in the project tree.

  • Lifetime Qt Champion


    In the project tree doesn't mean it gets compiled. Do you list in the sources in your pro file ?

  • yes.. it was listed.

  • Lifetime Qt Champion

    Can you show your pro file ?

  • @#-------------------------------------------------

    Project created by QtCreator 2012-09-04T13:47:46

    QT += gui declarative
    QT += core gui
    #DEFINES +=QT_DISABLE_DEPRECATED_BEFORE=0x040800 #0x050100 to disable functions deprecated in Qt 5.1 and earlier
    greaterThan(QT_MAJOR_VERSION, 4): QT += printsupport

    TARGET = MyApp
    TEMPLATE = app

    SOURCES += main.cpp

    HEADERS += mainwindow.h

    FORMS += mainwindow.ui


    Add the Signal11's hidapi library that was


    macx: LIBS += -L../HIDAPI/mac -lHIDAPI
    #win32: LIBS += -L../HIDAPI/windows -lHIDAPI
    unix: !macx: LIBS += -L../HIDAPI/linux -lHIDAPI


    Make sure to add the required libraries or

    frameoworks for the hidapi to work depending on

    what OS is being used

    macx: LIBS += -framework CoreFoundation -framework IOkit
    win32: LIBS += -lSetupAPI
    unix: !macx: LIBS += -lusb-1.0


    Make sure output directory for object file and

    executable is in the correct subdirectory

    macx {
    DESTDIR = mac
    OBJECTS_DIR = mac
    MOC_DIR = mac
    UI_DIR = mac
    RCC_DIR = mac
    unix: !macx {
    DESTDIR = linux
    OBJECTS_DIR = linux
    MOC_DIR = linux
    UI_DIR = linux
    RCC_DIR = linux
    win32 {
    DESTDIR = windows
    OBJECTS_DIR = windows
    MOC_DIR = windows
    UI_DIR = windows
    RCC_DIR = windows


  • I tried again.. and got the same error.

  • Lifetime Qt Champion

    Did you delete the build directory and do a full rebuild ?

  • I just tried and no it doesn't work.

    It should be so simple!

  • Lifetime Qt Champion

    Are all your files in the same folder ?

  • Yes.. they are.

    Thank you for your help by the way!

  • Lifetime Qt Champion

    Are you also calling this function in hid_pnp ?

  • In hid_pnp.. I setup an instance of the class by using

    CHexManager HexManager;

    so calling HexManager.LoadHexFile(); in hid_pnp... will produce the error.

  • Lifetime Qt Champion

    Then let's go step by step, comment all call to that function and build again, once it does, re-add them one by one.

  • THANK YOU!!!!

    I got it... I don,t know why I did this. But I had included #include "hid_pnp.h" in my hex.c file.

    Going to the strict minimum was a good idea.

  • Lifetime Qt Champion

    You're welcome !

    Since you have it working now, don't forget to update the thread title prepending [solved] so other forum users may know a solution has been found :)

Log in to reply