Probleme mit map
-
Hi,
ich versuche eine map in einer Klasse zu erstellen:
#include <string> #include <list> #include <map> #include <vector> map<std::string,UseCase> useCases;Ich bekomme aber folgende Fehler, mit denen ich nichts anzufangen weiß und die google Suche war auch nicht sehr ergiebig:
error LNK2001: Nicht aufgelöstes externes Symbol ""public: __thiscall std::_Lockit::~_Lockit(void)" (??1_Lockit@std@@QAE@XZ)"
Ist damit schon mal jemand in Kontakt gekommen?
lg Neulinger
-
Mehr Code! Ich sehe weder was UseCase ist, noch wo deine map in einer Klasse steht. Bringe ein Minimales Beispiel, welches den besagten Fehler noch zeigt.
edit: Wobei du ja merkwürdigerweise einen Linkerfehler bekommst. Welchen Compiler benutzt du?
-
Wenn ich richtig überlege, müsste auch beim Versuch, eine Instanz deiner Klasse
UseCasezu erstellen einen Linkerfehler bekommen.UseCase use;Bei gleichem Linkerfehler.
Ansonsten gibts da ja auch noch die Dokumentation deines Compilers: http://msdn.microsoft.com/de-de/library/f6xx1b1z.aspx
-
Ich benutze den VS2008 SP1.
Die Klassen in der Map sind egal, der Fehler kommt immer... auch bei Folgendem:
class MyClass { public: map<std::string, int> test_map; }
-
Wenn man sich die Fehlermeldung ansieht, würde ich auf VS tippen? Wenn das Projekt nicht allzu komplex ist, einfach ein neues machen und den alten Code dort rein kopieren. Das scheint bei MS öfters vorzukommen, dass sich irgendwelche Einstellungen verklemmen und dann gar nichts mehr geht. Ist zwar nicht toll, aber schnell erledigt. Schneller als den Fehler zu suchen. Da es sich um eine Funktion aus der STL (namespace std) zu handeln scheint, könnte das auch etwas haarig werden.
-
Neulinger schrieb:
Ich bekomme aber folgende Fehler, mit denen ich nichts anzufangen weiß und die google Suche war auch nicht sehr ergiebig:
error LNK2001: Nicht aufgelöstes externes Symbol ""public: __thiscall std::_Lockit::~_Lockit(void)" (??1_Lockit@std@@QAE@XZ)"
Ich tippe mal darauf, dass irgendwas mit den Projekteinstellungen im Argen ist. Offenbar versucht er, auf eine nicht hinzugelinkte Klasse vermutlich aus der Multithreading-Runtime-Library zuzugreifen. Vielleicht hast du Multithreading per #define aktiviert, aber nicht die Linkereinstellungen geändert.
Alles pure Spekulation.

-
Neuanzufangen ist eigentlich nicht so erstrebenswert, da ich mittlerweile bei weit über 25 Klassen angekommen bin... copy-paste ist dann schon viel Arbeit...
Ich wüsste nicht, dass ich multithreading aktiviert hätte!? Die Suche nach allen #define waren auch ohne Ergebnis...
-
Du sollst ja nicht neu anfangen, sondern nur ein neues Projekt anlegen und die alten Quellen dort rein kopieren.
-
Ich habe ein neues Projekt erstellt und einfach mal geschaut, ob ich da am Anfang eine map benutzen kann... leider erscheint wiederum der gleiche Fehler.
Was kann ich noch machen?
-
Baust du für Windows CE?
-
Ja für Windows Embedded 7.
-
Das ist offenbar ein Bug in der Implementierung der Standardlibrary. Soweit ich weiß, gibt es zwei mögliche Lösungen: Stell dein Projekt auf Multithreaded um, oder füge die Datei XLock.cpp deinem Projekt hinzu.
-
MFK schrieb:
[...] oder füge die Datei XLock.cpp deinem Projekt hinzu.
Wie genau meinst du das? Soll ich irgendeine Klasse XLock adden, oder gibt es eine vorgefertigte? Wo finde ich diese?
-
Also ich habe die Datei gefunden, bzw ich habe 2 gefunden:
C:\Programme\Microsoft Visual Studio 9.0\VC\ce\crt\src
C:\Programme\Microsoft Visual Studio 9.0\VC\crt\srcAuf den ersten Blick sind die beiden komplett gleich...
Egal welche ich einbinde, der Fehler bleibt so bestehen.
Auszug aus der cpp:
// xlock.cpp -- global lock for locales, etc. #include <stdlib.h> #include <yvals.h> #include "stdafx.h" #if _MULTI_THREAD #include "xmtx.h"Direkt am Anfang wird nach Multithreading abgefragt. Ab hier ist die CPP in meinem Projekt ausgegraut.
Ich kann natürlich die Variable _MULTI_THREAD in den Eigenschaften definieren, wodurch der Quellcode nicht mehr ausgegraut wird. Jedoch kennt der Compiler die folgende Bibliothek schon nicht.
Gibt es eine Möglichkeit Multithreading zu aktivieren?
Ich habe das Projekt einfach nur in den Projektmappe eingebunden. Muss ich vllt. noch was darüber hinaus machen?