Globale Arrays?



  • Wie deklariere ich Globale Arrays richtig? wenn ich zum Bleistift

    BOOL* ThreadActive = new BOOL[100];
    

    in den Konstruktor schreibe. bekomm ich die Fehlermeldung Ungueltige Syntax fuer rein virtuelle Methode; '= 0' erforderlich.

    Vielen Dank für die Hilfe



  • Hallo.

    Ich weiß persönlich gar nicht, ob man überhaupt globale Arrays/Variablen als Zeiger anlegen kann.
    Falls das geht, kann mir mal jemand sagen, wo die Dinger dann allokiert werden? 😕

    Bye.



  • kannst du noch ein bißchen drumrum-Code posten?

    probier#s mal mit einem anderen namen als "ThreadActive", kann sein daß sich da ein #define dahinter versteckt.



  • Man kann globale Arrays alloziieren. Du musst allerdings die Speicheranforderung an _einer_ Stelle im Programmfluss vornehmen.

    // Irgendwo:
    BOOL* g_bArray = 0;
    
    // z.B. in InitInstance
    g_bArray = new BOOL[100];
    
    // z.B. in ExitInstance
    delete[] g_bArray;
    

    Is' aber extrem schlechter Stil.



  • Sicher geht das:

    class blabla
    {
    	// ...
    };
    class blubb
    {
    	static blabla* bla;
    };
    blabla* blubb::bla = new blabla[100];
    

    Um Speicherlecks zu vermeiden, bietet sich aber eine Klasse an:

    template<class T>
    class auto_array
    {
    public:
    	auto_array(int size) : m_array(new typename T[size]) {}
    	~auto_array() { delete[] m_array; }
    	operator T*() { return m_array; }
    private:
    	T* m_array;
    	auto_array           (const auto_array&);
    	auto_array& operator=(const auto_array&);
    };
    
    class trallala
    {
    	// ...
    };
    class irgendwas
    {
    	static auto_array<trallala> bla;
    };
    auto_array<trallala> irgendwas::bla(100);
    

Anmelden zum Antworten