Frage zu globalen (externen) pair



  • Hi,

    ich habe eine Frage, mit der ich gerade nicht weiter komme:
    ich habe in einer Datei außerhalb einer Klasse ein pair definiert, auf das 2 andere Klassen in 2 anderen Dateien zugreifen sollen. Das funktioniert auch ohne Probleme. Allerdings soll es von den pair ein paar mehr geben, das mache ich bislang so:

    extern pair< int[2250], bool >, bool > RAM[3];
    

    und in der cc-Datei habe ich das dann auch noch einmal so stehen (außerhalb der Klasse und ohne das extern).

    Nun möchte ich die 3 aber dynamisch machen, also wollte ich mir darüber eine Varibale

    extern int count;
    

    anlegen, dann in der cc Datei

    int count = 3;
    

    schreiben, und dann eben in der Definition statt der 3 ein count, also

    extern pair< int[2250], bool >, bool > RAM[count];
    

    Aber das funktioniert nicht... Kann mir jemand von Euch sagen, wie das richtig heißen muss?

    MfG, Ozzy



  • vorneweg: globale variablen sind sch...lecht. lass das lieber.

    dein Problem hierbei ist, dass die zahl in den [] konstant sein muss. da deine variable aber nicht konstant ist, musst du das anders machen.

    extern pair< int[2250], bool >, bool >* RAM;
    
    //und in irgendeiner funktion:
    RAM=new pair< int[2250], bool >, bool >[count];
    

    natürlich musst du nun immer drauf achten, dass du mit new ein neues array anforderst, sobald sich count ändert, und dann musst du im zweifelsfall die werte des alten arrays ins neue kopieren, und dann wirds ekelhaft(vorallem mit globalen variablen).

    dann lieber so:

    extern std::vector<pair< int[2250], bool >, bool > > RAM;
    

    der vector macht all das automatisch.

    aber wie gesagt: globale variablen sind eh sch...lecht. machen nur probleme.



  • Hi,

    danke für Deine Antwort. Ich habe jetzt erst einmal eine Parameter-Datei erstellt, die ich include, und wo der Wert drinsteht. Ist vielleicht gar nicht so schlecht, das global in einer Datei zu machen.

    Aber kannst Du mir vielleicht noch einmal sagen, warum globale Variablen so schlecht sind?
    Könnte ich denn meinen Code so lassen, wenn ich das auf Pointer ändere?

    MfG, Ozzy


Log in to reply