String-Array



  • Hallo,

    ich habe eine Klasse, welche ich in eine *.h und eine *.c- Datei aufgeteilt habe (wies halt so üblich ist)
    ind der *.h- Datei habe ich folgendes stehen:

    class A {
    public:
           Class A();
           ~Class A();
           string ipAdressen[3];
           void fillipAdressen();
    };
    

    in der *.c- Datei steht folgendes:

    A::A() {      // also, wenn ein Objekt diese Klasse erzeugt wird, dann sollei die ipAdressen initialisiert werden
      fillipAdressen();
    }
    
    A::fillipAdressen() {
      ipAdressen[3] = {"10.0.0.1", "10.0.0.2", "10.0.0.3"};     
      }
    

    wenn ich jetzt nach dem initialisieren auf ipAdressen mit ipAdressen[1] zugreife, dann steht in diesem Array nichts drinnen,

    Kann sich das jemand erklären??

    Vielen Dank für Eure Antworten,

    lg



  • Achte mal auf die Syntax, die Du selbst benutzt: Du weist ipAdressen[3] irgendetwas zu, wieso sollte dann in ipAdressen[1] etwas drinstehen?

    C++ ist keine "Do what I mean"-Sprache, die rät was Du gerade möchtest. 🙂

    Die Lösung des Problems ist eigentlich: Arrays kann man so nicht zuweisen.



  • soweit ich weiß müsstest du es so machen

    A::fillipAdressen() {
      ipAdressen[0] = "10.0.0.1";
      ipAdressen[1] = "10.0.0.2";
      ipAdressen[2] = "10.0.0.3";
    
      }
    

    sobald es aber mehr als 5 ip´s werden, dann wird die sache umständlich so wie ich es gezeigt habe, aber für die 3 ist das eigentlich ausreichend



  • Zwei mögliche Alternativen:

    1. Die IP-Adressen ändern sich niemals:

    class A {
    public:
           Class A();
           ~Class A();
           static const string ipAdressen[3];
    }; 	
    
    // *.cpp
    const string A::ipAdressen = { ... };
    

    2. Die IP-Adressen sind Defaults, die geändert werden können:

    class A {
    public:
           Class A();
           ~Class A();
           string ipAdressen[3];
           void fillipAdressen();
    };
    
    // *.cpp
    
    static char const* ipDefaults[] = { ... };
    
    A::A() {      // also, wenn ein Objekt diese Klasse erzeugt wird, dann sollei die ipAdressen initialisiert werden
      fillipAdressen();
    }
    
    A::fillipAdressen() {
      // evtl noch
      // BOOST_STATIC_ASSERT( sizeof(ipDefaults)/sizeof(*ipDefaults) == sizeof(ipAdressen)/sizeof(*ipAdressen)
    
      std::copy(ipDefaults, ipDefaults + sizeof(ipDefaults)/sizeof(*ipDefaults), ipAdressen);
    }
    

Anmelden zum Antworten