Domanda Risolto Definire una variabile globale dentro una classe [C++]

DanyDollaro

Utente Electrum
14 Luglio 2018
148
41
58
138
Salve a tutti, come avrete letto dal titolo non riesco a definire una variabile che mantenga il suo valore dopo essere stata modificata da una funzione, e vi riporto questo semplice esempio:
C++:
#include <iostream>

class Toggle
{
    // Variabile interna
    bool toggle = 0;

public:
    // Costruttore
    Toggle()
    {
        toggle = 0;
    }

    // Funzione interna
    static void ChangeState(Toggle State)
    {
        std::cout << State.toggle;
        State.toggle = !State.toggle;
    }
};

int main()
{
    Toggle N1;

    while (1)
    {
        Toggle::ChangeState(N1);
        getchar();
    }
}

Creo una classe chiamata Toggle che ha come variabile interna bool toggle = 0; (Questa è la variabile che vorrei rendere globale) e tramite la funzione ChangeState() dovrebbe switchare tra la posizione 0 e 1, ma non è così, ogni volta che la funzione viene chiamata il valore di toggle è sempre uguale a 0 (viene reimpostato ogni volta all`inizio della funzione), e come output viene mostrato a schermo sempre il valore 0, sapreste dirmi come renderlo globale?
 
Ultima modifica:
Vuoi renderlo globale o vuoi che rimanga su un valore fisso?
Vorrei renderlo globale, se hai provato ad eseguire il codice, il valore mostrato sullo schermo è sempre 0, ed io vorrei che la variabile bool toggle diventi globale (in modo da preservare il valore dopo essere stato cambiato dalla funzione ChangeState())
 
Sei sicuro che è quello che vuoi fare? Nel caso ti lascio sia questo codice:
C++:
#include <iostream>

class Toggle {
private:
  bool toggle = 0;

public:
  void ChangeState() {
    std::cout << toggle;
    toggle = !toggle;
  }
};

int main() {
  Toggle N1;

  while (1) {
    N1.ChangeState();
    getchar();
  }

  return 0;
}

Che quest'altro codice:
C++:
#include <iostream>

class Toggle {
  static bool toggle;

public:
  static void ChangeState() {
    std::cout << toggle;
    toggle = !toggle;
  }
};

bool Toggle::toggle = false;

int main() {
  while (1) {
    Toggle::ChangeState();
    getchar();
  }

  return 0;
}
 
Grazie infinite St3ve :D, ora che ci penso dal modo in cui l`ho chiesto mi riferivo al tuo secondo codice in cui hai usato bool Toggle::toggle = false; , però trovo migliore il metodo che hai impiegato nel primo codice N1.ChangeState(); (non pensavo fosse possibile :))