Probleme mit statischem Feld



  • Servus,

    ich möchte eine Klasse schreiben, die ähnlich einem Singleton ist. Nur sollen mehrere Instanzen der Klasse erlaubt sein und diese in einem Array gespeichert werden. Aber irgendwo gibt es ein Problem beim initialisieren. Hier mal der Code und die Fehlermeldungen:

    class RS232{
    static RS232* openPorts[DIM];
    static HANDLE rs_handles[DIM];
    char buffer[255];
    DWORD eventMask;
    DCB dcb;
    ....

    #include "RS232.h"

    RS232* RS232::openPorts[0] = NULL;
    RS232* RS232::openPorts[1] = NULL;
    RS232* RS232::openPorts[2] = NULL;
    RS232* RS232::openPorts[3] = NULL;

    HANDLE RS232::rs_handles[0] = 0;
    HANDLE RS232::rs_handles[1] = 0;
    HANDLE RS232::rs_handles[2] = 0;
    HANDLE RS232::rs_handles[3] = 0;

    ....

    und nun die Fehlermeldungen:
    D:\MyProjects\RS232\RS232.CPP(4) : error C2466: Reservierung eines Feldes der konstanten Groesse 0 nicht moeglich
    D:\MyProjects\RS232\RS232.CPP(4) : error C2440: 'initializing' : 'const int' kann nicht in 'class RS232 *[4]' konvertiert werden
    Es gibt keine Konvertierungen von Feldtypen, obwohl es Konvertierungen von Verweisen oder Zeigern in Felder gibt
    D:\MyProjects\RS232\RS232.CPP(5) : error C2369: 'private: static class RS232 * * RS232::openPorts' : Neudefinition; unterschiedliche Feldindizes
    d:\myprojects\rs232\rs232.h(10) : Siehe Deklaration von 'private: static class RS232 * * RS232::openPorts'
    D:\MyProjects\RS232\RS232.CPP(6) : error C2369: 'private: static class RS232 * * RS232::openPorts' : Neudefinition; unterschiedliche Feldindizes
    d:\myprojects\rs232\rs232.h(10) : Siehe Deklaration von 'private: static class RS232 * * RS232::openPorts'

    Kann mir jemand weiterhelfen??



  • So geht das auch nicht.

    Es gibt in C++ in der Form keine Einzelfeldinitialiserung fuer Arrays.

    Die einzige Moeglichkeit ist:

    RS232* RS232::openPorts[DIM] = { NULL, NULL, NULL, NULL };
    
    HANDLE RS232::rs_handles[DIM] = { 0, 0, 0, 0 };
    


  • So gehts. Danke für die schnelle Hilfe!


Anmelden zum Antworten