Anzeige:
Ergebnis 1 bis 5 von 5

Thema: static Variable in einem struct

  1. #1
    Registrierter Benutzer
    Registriert seit
    11.04.2006
    Beiträge
    69

    static Variable in einem struct

    Ich will ein struct haben das eine staic Variable enthält. Die statiche Variable soll dann durch ein Funktion kontrolliert werden.

    hier erstmal der quelltext:

    main.cpp:

    Code:
    #include "types.h"
    
    
    
    
    int main()
    {
      foobar();
    
    }

    -----------------------------------------------------------------------
    dann die header datei types.h:

    Code:
    #ifndef TYPES
    #define TYPES 1
    
    
    
    struct CTypes
    {
      static int anzahl;
      int    foo;
      int    irgendwas;
    };
    
    int CTypes::anzahl=0;
    
    int foobar();
    
    
    
    #endif
    -------------------------------------------------

    und zum schluss noch die types.cpp:

    Code:
    int foobar()
    {
      CTypes::anzahl++;
    }





    wenn ich es komplieren will kommt:
    g++ -c types.cpp;g++ main.cpp types.o
    types.o(.bss+0x0): multiple definition of `CTypes::anzahl'
    /tmp/ccK3BVur.o(.bss+0x0): first defined here
    collect2: ld returned 1 exit status


    mhhh, wenn ich bei "int CTypes::anzahl=0;" das int aber weglass meckert er auch..
    Und wenn ich die "int CTypes::anzahl=0;" ganz weg lass dann ist die statische Variable ja nicht zugeweisen
    auch das zuweisen der 0 gleich im struct ist nicht gestattet




    mhhh, ich weis echt nich weiter wie das gehen soll..

  2. #2
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Das hier
    Code:
    int CTypes::anzahl=0;
    Muß in die types.cpp Datei

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  3. #3
    Registrierter Benutzer
    Registriert seit
    23.05.2004
    Beiträge
    592
    Die Lösung des Rätsels wurde bereits gepostet, aber zwei Anmerkungen hätte ich noch.

    Und wenn ich die "int CTypes::anzahl=0;" ganz weg lass dann ist die statische Variable ja nicht zugeweisen [...]
    Die Begriffe sind nicht ganz korrekt verwendet. Wenn du ein Konstrukt wie in den Anführungszeichen ganz weglässt, fehlt nicht nur eine Zuweisung. Vielmehr ist die ganze Variable dann nicht definiert, denn das was du innerhalb der Klassendefinition stehen hast (also innerhalb des "class { ... };"), dass ist nur eine Deklaration der statischen Variable.

    auch das zuweisen der 0 gleich im struct ist nicht gestattet
    Mal angenommen, das wäre erlaubt, dann würdest du bestimmt nicht "zuweisen" meinen, sondern "initialisieren".

    Auf die Gefahr hin pädagogisch zu wirken: Ich würde auch nahelegen die "One Definition Rule" (häufig ODR abgekürzt) mal nachzuschlagen. Die hängt mit deinem Problem zusammen.

  4. #4
    Registrierter Benutzer
    Registriert seit
    11.04.2006
    Beiträge
    69
    obwohl das Besipiel

    struct foo
    {
    static int bar=0;
    .....
    }

    hab ich in irendeinen turorial gesehen, weis aber leider nicht mehr genau in welchen.

  5. #5
    Registrierter Benutzer
    Registriert seit
    23.05.2004
    Beiträge
    592
    obwohl das Besipiel

    struct foo
    {
    static int bar=0;
    .....
    }

    hab ich in irendeinen turorial gesehen, weis aber leider nicht mehr genau in welchen.
    Das wäre dann halt falsch. Oder in deiner Errinerung ist ein "const" abhanden gekommen:
    Code:
    struct foo
     {
     static int const bar = 0;
     .....
     }
    Dies wäre in Ordnung.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •