laubi Geschrieben 2. April 2011 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
Klotzkopp Geschrieben 2. April 2011 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".
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden