Struct global



  • struct S {
    };
    
    A::Methode1
    S fill;
    
    B::Method2
    auf Structur zugreifen
    

    Wie kann ich eine struct innerhalb verschiedener Methoden global nutzen?
    Irgendwo hab ich von const S data; gelesen, dass liefert aber nur Nullen in B::Method2.

    Danke.



  • struct S
    {
    };
    
    S variable;
    
    A::methode()
    {
      void fill();
    }
    
    B::methode()
    {
      void machWasMitVariable();
    }
    

  • Mod

    Die Frage bitte nochmal wiederholen, aber in klar und deutlich. Lese unbedingt aufmerksam(!) die als wichtig markierten Threads, die sich auf diese Problematik beziehen.

    Codebeispiele bitte entweder mit korrekter, verständlicher Syntax; oder, falls Pseudocode, ausführlich genug, dass man sie auch verstehen kann. Codetags korrekt benutzen, so dass es auch lesbar ist.



  • im Header definiert:
    struct S
    {
    double d1
    };
    
    im .cpp definiert:
    
    S data;
    
    A::methode()
    {
    data.d1 = 10;
    }
    
    B::methode()
    {
    double testvar = data.d1;
    }
    

    Dies führt dazu, dass testvar 0 ist und nicht 10.

    P.S. die Codeformatierung funktioniert bei mir nicht.



  • Sunset schrieb:

    Dies führt dazu, dass testvar 0 ist und nicht 10.

    Da wird ja auch nirgendwo eine der Funktionen aufgerufen.

    Sunset schrieb:

    die Codeformatierung funktioniert bei mir nicht.

    Benutz die Buttons unter dem Editierfeld.
    Du kannst (und solltest) Deine Beiträge oben editieren.



  • [quote="Furble Wurble"][quote="Sunset"]Dies führt dazu, dass testvar 0 ist und nicht 10.[/quote]Da wird ja auch nirgendwo eine der Funktionen aufgerufen.
    [/quote]
    Ok, aber das hab ich jetzt nicht explizit hingeschrieben. Beide Methoden werden nacheinander aufgerufen.



  • Ein vollständiges Beispiel könnte so aussehen:

    #include <iostream>
    
    struct S
    {
      double d;
    };
    
    S data;
    
    class A{
      public:
        void methode(){data.d = 10.0;}
    };
    
    class B{
      public:
        void methode(){double testvar = data.d; std::cout << "testvar: " << testvar;}
    };
    
    int main()
    {
      A a;
      a.methode();
    
      B b;
      b.methode();
    }
    


  • Oder mit viel Liebe aufteilen: 🙂

    // s.h
    #ifndef S_H
    #define S_H
    
    struct S{
      double d1;
    };
    
    #endif
    
    // a.h
    #ifndef A_H
    #define A_H
    
    struct A{
      void method();
    };
    
    #endif
    
    // a.cc
    #include "a.h"
    #include "s.h"
    
    extern S data;
    
    void A::method(){
      data.d1 = 10;
    }
    
    // b.h
    #ifndef B_H
    #define B_H
    
    struct B{
      void method();
    };
    
    #endif
    
    // b.cc
    #include <iostream>
    
    #include "b.h"
    #include "s.h"
    
    extern S data;
    
    void B::method(){
      std::cout << data.d1 << std::endl;
    }
    
    // main.cc
    #include "a.h"
    #include "b.h"
    #include "s.h"
    
    S data;
    
    int main(){
      A a;
      a.method();
      B b;
      b.method();
    }
    

  • Mod

    Sunset schrieb:

    P.S. die Codeformatierung funktioniert bei mir nicht.

    Du hast BBCode ausgeschaltet. Entweder global in deinem Profil oder explizit für jeden deiner Beiträge. Das war eine schlechte Idee.


Log in to reply