[solved] QHash's insert() wrong use? --> VS-Debugger showed botch data due to missing Qt-Addon for VS
-
@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?
-
[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.
-
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]
-
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
-
[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.libAnd 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
-
and here you have the log of my myDataController from the Watch window:
@- myDataController {myQHash={...} } DataController
- myQHash {d=0x003d35a0 e=0x003d35a0 } QHash<int,DataItem *>
- d 0x003d35a0 {fakeNext=0x00000000 buckets=0x003d35d8 ref={...} ...} QHashData *
- fakeNext 0x00000000 {next=??? h=??? } QHashData::Node *
- buckets 0x003d35d8 QHashData::Node * *
- ref {_q_value=1 } QBasicAtomicInt
size 2 int
nodeSize 12 int
userNumBits 4 short
numBits 4 short
numBuckets 17 int
sharable 1 unsigned int
- e 0x003d35a0 {next=0x00000000 h=4011480 key=4011480 ...} QHashNode<int,DataItem *> *
- next 0x00000000 {next=??? h=??? key=??? ...} QHashNode<int,DataItem *> *
next CXX0030: Error: expression cannot be evaluated
h CXX0030: Error: expression cannot be evaluated
key CXX0030: Error: expression cannot be evaluated
value CXX0030: Error: expression cannot be evaluated
h 4011480 unsigned int
key 4011480 int - value 0x00000001 {dataID=??? dataName={...} dataCat=??? ...} DataItem *
dataID CXX0030: Error: expression cannot be evaluated - dataName {d=??? } QString
d CXX0017: Error: symbol "" not found
dataCat CXX0030: Error: expression cannot be evaluated
dataCon CXX0030: Error: expression cannot be evaluated
@