static Objekt Pointer speichern?
-
Hi,
ich versuche einen static Objekt Pointer zu speicher aber ich bekomme ich es nicht hin
mein bisheriger Versuch:class PackageHandler { public: static void StartPackageHandler(); static Server* mServer; }; void PackageHandler::StartPackageHandler() { mServer = new Server(1000,PackageHandler::HandlePackage); // hier ist der Fehler }Fehler:
error LNK2001: unresolved external symbol "public: static class Server * PackageHandler::mServer" (?mServer@PackageHandler@@2PAVServer@@A) PackageHandler.obj
was mache ich falsch?
mfg
gandime
-
Du musst die statische Variable noch definieren. So ist sie nur deklariert.
class PackageHandler { public: static void StartPackageHandler(); static Server* mServer; }; Server* PackageHandler::mServer = 0;
-
das hat super geklappt^^
nun hab ich noch eine andere static variable die nicht so recht will^^class PackageHandler { public: static void StartPackageHandler(); static map<UID,Client> mClients; }; void PackageHandler::StartPackageHandler() { mClients[pID].ID = pID; // hier ist der Fehler }Fehler:
error LNK2001: unresolved external symbol "public: static class std::map<unsigned int,struct PackageHandler::Client,struct std::less<unsigned int>,class std::allocator<struct std::pair<unsigned int const ,struct PackageHandler::Client> > > PackageHandler::mClients" (?mClients@PackageHandler@@2V?less@I@std@@V?pair@$$CBIUClient@PackageHandler@@@std@@@4@@std@@A) PackageHandler.obj
Es ist bestimmt das selbe wie bei dem anderen... aber wie Definiere ich die denn eine map?
-
gandime schrieb:
Es ist bestimmt das selbe wie bei dem anderen... aber wie Definiere ich die denn eine map?
// Header class Foo { static std::Map<int, int> MyGreatMap; // Deklaration }; // Source std::Map<int, int> Foo::MyGreatMap; // Definition
-
Ganz analog.
PackageHandler::map<UID,Client> mClients;Der Unterschied ist halt, dass ein Zeiger in dem Sinne keinen Default-ctor hat und du daher den Konstruktor (getarnt als Zuweisung) aufrufen musst. Bei einem Standardcontainer sieht das anderst aus. Da hast du einen Default-ctor und brauchst daher auch keine Parameter zu übergeben.
-
hat alles gut geklappt thx