laubi Geschrieben 2. April 2011 Teilen Geschrieben 2. April 2011 hallo, ich üb mal wieder mit klassen und habe eine neue frage, und da ich hier immer nützliche antworten bekomme frag ich gleich hier also ich habe z.B. folgende klasse: klassenname.h: class Klassenname{ private: #if defined(WINDOWS) static bool windowssetted; #endif //andere eigenschaften public: #if defnied(WINDOWS) static bool iswindowssetted(); #endif //andere methoden und konstruktoren }; Klassenname.cpp: #if defined(WIN32) || defined(_WIN32) #define WINDOWS 1 #endif #include "Klassenname.h" #if defined(WINDOWS) bool Klassenname::iswindowssetted(){ if(!windowssetted){ return windowssetted=::machewas();//wenns gut gegangen ist wird die eigenschaft af true gesetzt return true; } #endif also hier die probleme: static bool windowssetted sollte am anfang auf false stehen, damit machewas() nur einmal aufgerufen wird und nicht öfters, daher ist sie auch static. aber bei mir kommt immer der fehler: 1>main.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""private: static bool MySock::iswinsetted" (?iswinsetted@MySock@@0_NA)". wie kann ich das so machen das die klasse ihre arbeit richtig macht? und da die eigenschaft nur bei windows sein sollte habe ich das mit den präprozessor so gemacht, aber geht es vielleicht besser? danke im vorraus, Laubi Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 2. April 2011 Teilen Geschrieben 2. April 2011 aber bei mir kommt immer der fehler: 1>main.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""private: static bool MySock::iswinsetted" (?iswinsetted@MySock@@0_NA)".Das liegt daran, dass das hier nur eine Deklaration ist: class Klassenname{ private: // ... static bool windowssetted; // Das hier ist nur eine Deklaration! [/code] Die Definition dieser Variablen fehlt, daher beschwert sich der Linker. Du musst die Variable in einer Übersetzungseinheit (Klassenname.cpp würde sich anbieten) [b]definieren[/b]. Dort kannst du sie dann auch initialisieren: [code]bool Klassenname::windowsetted = false; Nebenbei: Das Past Participle von "to set" ist "set", nicht "setted". Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
laubi Geschrieben 2. April 2011 Autor Teilen Geschrieben 2. April 2011 Danke, geht jetzt ohne probleme Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.