Zum Inhalt springen

private static eigenschaten


laubi

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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".

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...