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. [solved] QHash's insert() wrong use? --> VS-Debugger showed botch data due to missing Qt-Addon for VS
Forum Updated to NodeBB v4.3 + New Features

[solved] QHash's insert() wrong use? --> VS-Debugger showed botch data due to missing Qt-Addon for VS

Scheduled Pinned Locked Moved General and Desktop
45 Posts 7 Posters 21.3k 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.
  • L Offline
    L Offline
    ludde
    wrote on last edited by
    #11

    I think you will have to show us the SpecialObject class, if you cannot figure out what's wrong with it from the help you've been given so far.

    1 Reply Last reply
    0
    • G Offline
      G Offline
      goetz
      wrote on last edited by
      #12

      Even better, create a complete test case, consisting of just the class, a main method and a method that triggers the crash.

      http://www.catb.org/~esr/faqs/smart-questions.html

      1 Reply Last reply
      0
      • H Offline
        H Offline
        huckfinn
        wrote on last edited by
        #13

        Here you have compileable but not yet linkable codes. LinkError see bottom.

        DataItem.cpp
        @#include "DataItem.h"
        #include <QString>
        DataItem::DataItem()
        {
        this->dataID = 0;
        this->dataCon = 0;
        this->dataCat = 0;
        this->dataName = "defName";
        }

        DataItem::DataItem(qint32 tId, QString tName, qint32 tCat, qint32 tCon)
        {
        this->dataID = tId;
        this->dataCon = tCon;
        this->dataCat = tCat;
        this->dataName = tName;
        }

        qint32 DataItem::getID() const { return this->dataID; }

        QString DataItem::getName() const { return this->dataName; }

        qint32 DataItem::getCat() const { return this->dataCat; }

        qint32 DataItem::getCon() const { return this->dataCon; }

        DataItem::~DataItem(void) {}@

        DataItem.h
        @#pragma once

        #include <QString>

        class DataItem
        {
        public:
        DataItem();
        DataItem(qint32 tId, QString tName, qint32 tCat, qint32 tCon);
        ~DataItem(void);

        qint32 getID() const;
        QString getName() const;
        qint32 getCat() const;
        qint32 getCon() const;

        private:
        qint32 dataID;
        QString dataName;
        qint32 dataCat;
        qint32 dataCon;
        };@

        DataController.cpp
        @#include <QHash>
        #include "DataController.h"
        #include "DataItem.h"

        //DataController::DataController(void)
        //{
        //
        //}

        //void DataController::addNew(DataItem * tPI) { this->myQHash.insert(tPI->getID(), *tPI); }

        void DataController::addNew(qint32 tID, QString tName, qint32 tCat, qint32 tCon)
        {
        //DataItem tPI (tID, tName, tCat, tCon);
        DataItem * tPI = new DataItem(tID, tName, tCat, tCon);
        this->myQHash.insert(tID, tPI);
        }

        DataController::~DataController(void) {}@

        DataController.h
        @
        #pragma once

        #include <QString>
        #include <QHash>
        #include "DataItem.h"

        class DataController
        {
        public:
        //DataController(void);
        ~DataController(void);
        //void addNew(DataItem * tPI);
        void addNew(qint32, QString, qint32, qint32);

        private:
        QHash<qint32, DataItem*> myQHash;
        };@

        MyDockWidget.cpp
        @#include "MyDockWidget.h"
        #include "DataController.h"
        #include <QString>
        MyDockWidget::MyDockWidget( )
        {
        //DataController myDataController;
        }

        int MyDockWidget::main(int p_argsc, char *p_argsv[] )
        {
        //this->myDataController = new DataController();
        myDataController.addNew(2511, "Heim", 20481, 1272923);
        myDataController.addNew(2512, "Work", 20482, 1272963);
        // Breakpoint here

        return 1;
        

        }
        @

        MyDockWidget.h
        @#ifndef MY_DOCK_WIDGET_H
        #define My_DOCK_WIDGET_H
        #include <QString>
        #include "DataController.h"

        class MyDockWidget
        {
        //Q_OBJECT

        public:
            /// @brief constructor
            MyDockWidget();
        
            DataController myDataController;
        

        int main( int p_argsc, char *p_argsv[] );
        };
        #endif // MY_DOCK_WIDGET_H
        @

        I now get a Linker-Error:
        1>Linking...
        1>DataItem.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall QString::~QString(void)" (_imp??1QString@@QAE@XZ) referenced in function __unwindfunclet$??0DataItem@@QAE@XZ$0

        but I did not use any Libs or Dlls??! How is that be?

        1 Reply Last reply
        0
        • Z Offline
          Z Offline
          ZapB
          wrote on last edited by
          #14

          Yes you are. You are using the QtCore dll. Also where is your main() function?

          Nokia Certified Qt Specialist
          Interested in hearing about Qt related work

          1 Reply Last reply
          0
          • G Offline
            G Offline
            giesbert
            wrote on last edited by
            #15

            You are missing the linker options in your pro file.
            can you show it to us?
            or what do you use for compiling?

            For me, your code compiles fine.

            Nokia Certified Qt Specialist.
            Programming Is Like Sex: One mistake and you have to support it for the rest of your life. (Michael Sinz)

            1 Reply Last reply
            0
            • L Offline
              L Offline
              ludde
              wrote on last edited by
              #16

              Code looks OK to me. Except your DataController destructor should probably destroy the DataItems. But the way your DataItems are now, you should be able to pass them around by value, i.e. not bother with new/delete and the use of pointers.

              1 Reply Last reply
              0
              • H Offline
                H Offline
                huckfinn
                wrote on last edited by
                #17

                @Gerolf: Yes the compilation is not my problem ;) My linker will not link my stuff ;)

                @ZapB: Ok, I included the %QTDIR%qt4.5.0libQtCore4.lib to
                Project --> Properties --> Linker --> General --> Add additional Libraries. But same linker error as above.

                bq. 1>Linking...
                1>DataItem.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall QString::~QString(void)" (_imp??1QString@@QAE@XZ) referenced in function __unwindfunclet$??0DataItem@@QAE@XZ$0
                1>DataController.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall QString::~QString(void)" (_imp??1QString@@QAE@XZ)
                ////etc....
                1>deldel3 - 19 error(s), 0 warning(s)
                ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

                Qstring is in QtCore as well as far as I know?

                The main? Is that wrong?

                1 Reply Last reply
                0
                • H Offline
                  H Offline
                  huckfinn
                  wrote on last edited by
                  #18

                  @ludde: Yes of course. I will destroy all DataItems pointers objects which are stored in my heap after all.
                  But therefore I have to store them first, which was my initial problem. Now, my smaller problem is to make that app run ;)

                  1 Reply Last reply
                  0
                  • Z Offline
                    Z Offline
                    ZapB
                    wrote on last edited by
                    #19

                    I could not see a main() function in what you posted.

                    Nokia Certified Qt Specialist
                    Interested in hearing about Qt related work

                    1 Reply Last reply
                    0
                    • L Offline
                      L Offline
                      ludde
                      wrote on last edited by
                      #20

                      The main function is inside the MyDockWidget class - looks really weird to me... Does the main function not have to be global?

                      Regarding the link errors, which IDE are you using to build your project?

                      1 Reply Last reply
                      0
                      • H Offline
                        H Offline
                        huckfinn
                        wrote on last edited by
                        #21

                        ah ok. without MyDockWidget:: in front?

                        just:
                        @int main(int p_argsc, char *p_argsv[] ) {
                        myDataController.addNew(2511, "Heim", 20481, 1272923);
                        myDataController.addNew(2512, "Work", 20482, 1272963);
                        // Breakpoint here
                        return 1;
                        }
                        @

                        1 Reply Last reply
                        0
                        • L Offline
                          L Offline
                          ludde
                          wrote on last edited by
                          #22

                          Yeah, but then you cannot use myDataController, you have to create it first.
                          And remove the declaration of main() in the .h file.

                          1 Reply Last reply
                          0
                          • H Offline
                            H Offline
                            huckfinn
                            wrote on last edited by
                            #23

                            [quote author="ludde" date="1309856111"]Regarding the link errors, which IDE are you using to build your project?[/quote]
                            Visual Studio 2008 Version 9

                            1 Reply Last reply
                            0
                            • H Offline
                              H Offline
                              huckfinn
                              wrote on last edited by
                              #24

                              [quote author="ludde" date="1309856111"]The main function is inside the MyDockWidget class - looks really weird to me... Does the main function not have to be global?[/quote]

                              This project is in real a *.dll. I just extracted the required methods and classes to reproduce my QHash problem.

                              Hint: The original projects were generated by cmake, which should add corresponding libs correctly.

                              1 Reply Last reply
                              0
                              • G Offline
                                G Offline
                                giesbert
                                wrote on last edited by
                                #25

                                huckfinn,

                                are you using MSDEV for building?
                                If yes, please post your vcproj file via pastebin ort similar shares. I'm sure, the problem is located there.

                                Nokia Certified Qt Specialist.
                                Programming Is Like Sex: One mistake and you have to support it for the rest of your life. (Michael Sinz)

                                1 Reply Last reply
                                0
                                • H Offline
                                  H Offline
                                  huckfinn
                                  wrote on last edited by
                                  #26

                                  Here is my vproj file:

                                  @
                                  <?xml version="1.0" encoding="Windows-1252"?>
                                  <VisualStudioProject
                                  ProjectType="Visual C++"
                                  Version="9,00"
                                  Name="deldel3"
                                  ProjectGUID="{19DD986F-AEBE-4C05-8309-B174DE1C1C3F}"
                                  RootNamespace="deldel3"
                                  TargetFrameworkVersion="196613"

                                  <Platforms>
                                  <Platform
                                  Name="Win32"
                                  />
                                  </Platforms>
                                  <ToolFiles>
                                  </ToolFiles>
                                  <Configurations>
                                  <Configuration
                                  Name="Debug|Win32"
                                  OutputDirectory="$(SolutionDir)$(ConfigurationName)"
                                  IntermediateDirectory="$(ConfigurationName)"
                                  ConfigurationType="1"
                                  UseOfMFC="0"
                                  CharacterSet="2"

                                  <Tool
                                  Name="VCPreBuildEventTool"
                                  />
                                  <Tool
                                  Name="VCCustomBuildTool"
                                  />
                                  <Tool
                                  Name="VCXMLDataGeneratorTool"
                                  />
                                  <Tool
                                  Name="VCWebServiceProxyGeneratorTool"
                                  />
                                  <Tool
                                  Name="VCMIDLTool"
                                  />
                                  <Tool
                                  Name="VCCLCompilerTool"
                                  Optimization="0"
                                  AdditionalIncludeDirectories=""C:\\Qt\\qt-win-opensource-src-4.5.0\\include\\QtGui";"C:\\Qt\\qt-win-opensource-src-4.5.0\\include\\QtCore";"C:\\Qt\\qt-win-opensource-src-4.5.0\\include""
                                  MinimalRebuild="true"
                                  BasicRuntimeChecks="3"
                                  RuntimeLibrary="2"
                                  WarningLevel="3"
                                  DebugInformationFormat="4"
                                  />
                                  <Tool
                                  Name="VCManagedResourceCompilerTool"
                                  />
                                  <Tool
                                  Name="VCResourceCompilerTool"
                                  />
                                  <Tool
                                  Name="VCPreLinkEventTool"
                                  />
                                  <Tool
                                  Name="VCLinkerTool"
                                  LinkLibraryDependencies="false"
                                  UseUnicodeResponseFiles="false"
                                  AdditionalLibraryDirectories=""C:\\Qt\\qt-win-opensource-src-4.5.0\\lib\\QtCored4.lib";"C:\\Qt\\qt-win-opensource-src-4.5.0\\lib\\QtCore4.lib""
                                  GenerateDebugInformation="true"
                                  EntryPointSymbol="main"
                                  TargetMachine="1"
                                  />
                                  <Tool
                                  Name="VCALinkTool"
                                  />
                                  <Tool
                                  Name="VCManifestTool"
                                  />
                                  <Tool
                                  Name="VCXDCMakeTool"
                                  />
                                  <Tool
                                  Name="VCBscMakeTool"
                                  />
                                  <Tool
                                  Name="VCFxCopTool"
                                  />
                                  <Tool
                                  Name="VCAppVerifierTool"
                                  />
                                  <Tool
                                  Name="VCPostBuildEventTool"
                                  />
                                  </Configuration>
                                  <Configuration
                                  Name="Release|Win32"
                                  OutputDirectory="$(SolutionDir)$(ConfigurationName)"
                                  IntermediateDirectory="$(ConfigurationName)"
                                  ConfigurationType="1"
                                  CharacterSet="2"
                                  WholeProgramOptimization="1"

                                  <Tool
                                  Name="VCPreBuildEventTool"
                                  />
                                  <Tool
                                  Name="VCCustomBuildTool"
                                  />
                                  <Tool
                                  Name="VCXMLDataGeneratorTool"
                                  />
                                  <Tool
                                  Name="VCWebServiceProxyGeneratorTool"
                                  />
                                  <Tool
                                  Name="VCMIDLTool"
                                  />
                                  <Tool
                                  Name="VCCLCompilerTool"
                                  Optimization="2"
                                  EnableIntrinsicFunctions="true"
                                  RuntimeLibrary="2"
                                  EnableFunctionLevelLinking="true"
                                  WarningLevel="3"
                                  DebugInformationFormat="3"
                                  />
                                  <Tool
                                  Name="VCManagedResourceCompilerTool"
                                  />
                                  <Tool
                                  Name="VCResourceCompilerTool"
                                  />
                                  <Tool
                                  Name="VCPreLinkEventTool"
                                  />
                                  <Tool
                                  Name="VCLinkerTool"
                                  GenerateDebugInformation="true"
                                  OptimizeReferences="2"
                                  EnableCOMDATFolding="2"
                                  TargetMachine="1"
                                  />
                                  <Tool
                                  Name="VCALinkTool"
                                  />
                                  <Tool
                                  Name="VCManifestTool"
                                  />
                                  <Tool
                                  Name="VCXDCMakeTool"
                                  />
                                  <Tool
                                  Name="VCBscMakeTool"
                                  />
                                  <Tool
                                  Name="VCFxCopTool"
                                  />
                                  <Tool
                                  Name="VCAppVerifierTool"
                                  />
                                  <Tool
                                  Name="VCPostBuildEventTool"
                                  />
                                  </Configuration>
                                  </Configurations>
                                  <References>
                                  </References>
                                  <Files>
                                  <Filter
                                  Name="Source Files"
                                  Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
                                  UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"

                                  <File
                                  RelativePath=".\\DataController.cpp"
                                  >
                                  </File>
                                  <File
                                  RelativePath=".\\DataItem.cpp"
                                  >
                                  </File>
                                  <File
                                  RelativePath=".\\MyDockWidget.cpp"
                                  >
                                  </File>
                                  </Filter>
                                  <Filter
                                  Name="Header Files"
                                  Filter="h;hpp;hxx;hm;inl;inc;xsd"
                                  UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"

                                  <File
                                  RelativePath=".\\DataController.h"
                                  >
                                  </File>
                                  <File
                                  RelativePath=".\\DataItem.h"
                                  >
                                  </File>
                                  <File
                                  RelativePath=".\\MyDockWidget.h"
                                  >
                                  </File>
                                  </Filter>
                                  <Filter
                                  Name="Resource Files"
                                  Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
                                  UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"

                                  </Filter>
                                  </Files>
                                  <Globals>
                                  </Globals>
                                  </VisualStudioProject>
                                  @

                                  Thank you for your patience. Cheers Huck

                                  [EDIT: code formatting, use @-tags, not 'quote', Volker]

                                  1 Reply Last reply
                                  0
                                  • G Offline
                                    G Offline
                                    giesbert
                                    wrote on last edited by
                                    #27

                                    Hi,

                                    I see two bugs in there:

                                    you do not link the QtCore.lib in release mode

                                    You link debug and release lib in debug mode.

                                    Correct this and try again please.

                                    Nokia Certified Qt Specialist.
                                    Programming Is Like Sex: One mistake and you have to support it for the rest of your life. (Michael Sinz)

                                    1 Reply Last reply
                                    0
                                    • G Offline
                                      G Offline
                                      giesbert
                                      wrote on last edited by
                                      #28

                                      additionally, you would typically have some stuff in the Globals section:

                                      @
                                      <Globals>
                                      <Global
                                      Name="MocDir"
                                      Value=".\\GeneratedFiles\\$(ConfigurationName)"
                                      />
                                      <Global
                                      Name="QtVersion"
                                      Value="MSVS2008SP1"
                                      />
                                      <Global
                                      Name="RccDir"
                                      Value=".\\GeneratedFiles"
                                      />
                                      <Global
                                      Name="UicDir"
                                      Value=".\\GeneratedFiles"
                                      />
                                      </Globals>
                                      </VisualStudioProject>
                                      @

                                      EDIT: this is used by the Qt plugin for MSVS

                                      Nokia Certified Qt Specialist.
                                      Programming Is Like Sex: One mistake and you have to support it for the rest of your life. (Michael Sinz)

                                      1 Reply Last reply
                                      0
                                      • H Offline
                                        H Offline
                                        huckfinn
                                        wrote on last edited by
                                        #29

                                        They're empty..
                                        @ <Globals>
                                        </Globals>@

                                        What was MSDEV? (previous post)

                                        1 Reply Last reply
                                        0
                                        • H Offline
                                          H Offline
                                          huckfinn
                                          wrote on last edited by
                                          #30

                                          [quote author="Gerolf" date="1309865412"]Hi, I see two bugs in there: # you do not link the QtCore.lib in release mode # You link debug and release lib in debug mode. Correct this and try again please.[/quote]

                                          Thank you Gerolf. Now, I can compile link and run my program.
                                          Project --> Properties --> Linker --> Input --> Additional dependecies --> PathToCore4Lib\QtCore4.lib

                                          And I have same error with my QHash. It was reproducable.

                                          Here is my sourcecode again:
                                          MyDockWidget cpp and h
                                          @
                                          #include "MyDockWidget.h"
                                          #include "DataController.h"

                                          MyDockWidget::MyDockWidget( )
                                          {
                                          }

                                          int main(int p_argsc, char *p_argsv[] )
                                          {
                                          DataController myDataController;
                                          myDataController.addNew(2511, "Heim", 20481, 1272923);
                                          myDataController.addNew(2512, "Work", 20482, 1272963);
                                          // Breakpoint here
                                          return 1;
                                          }

                                          // here header
                                          #ifndef MY_DOCK_WIDGET_H
                                          #define My_DOCK_WIDGET_H
                                          #include <QString>
                                          #include "DataController.h"

                                          class MyDockWidget
                                          {
                                          public:
                                          MyDockWidget();
                                          DataController myDataController;
                                          };
                                          #endif // MY_DOCK_WIDGET_H
                                          @

                                          DataController cpp and h
                                          @
                                          #include <QHash>
                                          #include "DataController.h"
                                          #include "DataItem.h"

                                          void DataController::addNew(qint32 tID, QString tName, qint32 tCat, qint32 tCon)
                                          {
                                          DataItem * tPI = new DataItem(tID, tName, tCat, tCon);
                                          this->myQHash.insert(tID, tPI);
                                          }

                                          DataController::~DataController(void) {}

                                          // here header
                                          #pragma once

                                          #include <QString>
                                          #include <QHash>
                                          #include "DataItem.h"

                                          class DataController
                                          {
                                          public:
                                          ~DataController(void);
                                          void addNew(qint32, QString, qint32, qint32);
                                          private:
                                          QHash<qint32, DataItem*> myQHash;
                                          };
                                          @

                                          DataItem cpp and h
                                          @
                                          #include "DataItem.h"
                                          #include <QString>
                                          DataItem::DataItem()
                                          {
                                          this->dataID = 0;
                                          this->dataCon = 0;
                                          this->dataCat = 0;
                                          this->dataName = "defName";
                                          }

                                          DataItem::DataItem(qint32 tId, QString tName, qint32 tCat, qint32 tCon)
                                          {
                                          this->dataID = tId;
                                          this->dataCon = tCon;
                                          this->dataCat = tCat;
                                          this->dataName = tName;
                                          }

                                          qint32 DataItem::getID() const { return this->dataID; }

                                          QString DataItem::getName() const { return this->dataName; }

                                          qint32 DataItem::getCat() const { return this->dataCat; }

                                          qint32 DataItem::getCon() const { return this->dataCon; }

                                          DataItem::~DataItem(void) {}

                                          // here header
                                          #pragma once

                                          #include <QString>

                                          class DataItem
                                          {
                                          public:
                                          DataItem();
                                          DataItem(qint32 tId, QString tName, qint32 tCat, qint32 tCon);
                                          ~DataItem(void);

                                          qint32 getID() const;
                                          QString getName() const;
                                          qint32 getCat() const;
                                          qint32 getCon() const;

                                          private:
                                          qint32 dataID;
                                          QString dataName;
                                          qint32 dataCat;
                                          qint32 dataCon;
                                          };
                                          @

                                          Cheers Huck

                                          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