string array dynamisch anlegen



  • Den füllst du mit push_back. Er wird dann autom. größer. Die aktuelle Größe kannst du mit size feststellen.

    Mit at() oder []-Operator greifst du zu, auf bereits vorhandene Elemente.

    Schau mal hier:
    http://www.kharchi.de/cppratgeber2.htm



  • Eigentlich wollte ich willkürlich auf die Elemente zugreifen, um sie
    später auch untereinander tauschen zu können.



  • mase schrieb:

    Aber wenn ich (NumberOfValues) weglasse, dann ist doch die Anzahl der
    Felder im Vector nicht festgelegt.

    Wo - meinst Du denn - ist das "NumberOfValues" weggelassen worden?

    mase schrieb:

    Muss ich ihn dann nicht zwangsläufig mit at() füllen?

    "at" ist die Methode die Dir genau wie "[]" den Zugriff auf das i'te Element im vector gibt. Mit dem Unterschied, dass at eine Exception wirft, falls der Index größer oder gleich der Anzahl der Elemente im vector ist.



  • Bei

    cConfigEntry::vector<string>Value(NumberOfValues);
    

    also jetzt

    cConfigEntry::vector<string>Value;
    

    Ersteres verursacht einen Fehler.



  • Nein, das kannst du doch so lassen!

    Werner ging es um das:

    cConfigEntry::vector<string>(NumberOfValues);
    

    Erkennste nicht den Unterschied??? 😕

    Achja, warum machst du eigentlich kein Leerzeichen zwischen Typ und Variable??? Ich meine nur, lässt sich doch dann besser lesen.



  • Jetzt steh ich auf'm Schlauch.
    Ich hab den Vector doch jetzt im Header implementiert.
    Und mit

    cConfigEntry::vector<string>(NumberOfValues);
    

    hätte der Vector doch keinen Namen.
    Der Vector soll Value heissen und NumberOfValues Elemente haben.



  • Eeeeeeben! Deshalb hat Werner gesagt, das es Unsinn ist und weggelassen werden kann!



  • Ich will ihn ja nicht mit push_back füllen, sondern das Element
    explizit angeben.
    In allen Büchern, die ich hab steht:
    vector<typ> name (anzahl der elemente);
    und die Zugriffe mit
    name[element]=wert;
    cout<<name[element];
    Was mach ich denn dann falsch?



  • Jetzt machst du nichts falsch! Lies doch noch mal die Beiträge um was es genau ging.

    So, jetzt ist aber genug...



  • Noch einen Fehler hab ich.

    class cConfigEntry
    {
    	public:
    	~cConfigEntry()
    	{
    	}
    	private:
    	cConfigEntry()
    	{
    		NumberOfValues=1;
    	}
    	cConfigEntry(unsigned _NumberOfValues):NumberOfValues(_NumberOfValues)
    	{
    	}
    	unsigned NumberOfValues;
    	std::vector<std::string>Value(NumberOfValues);
    ...
    };
    

    ergibt, dass NumberOfValues kein Typ sei.

    Dann hab ich einfach mal

    class cConfigEntry
    {
    	public:
    	~cConfigEntry()
    	{
    	}
    	private:
    	cConfigEntry()
    	{
    		NumberOfValues=1;
    	}
    	cConfigEntry(unsigned _NumberOfValues):NumberOfValues(_NumberOfValues)
    	{
    	}
    	unsigned NumberOfValues;
    	std::vector<std::string>Value(unsigned NumberOfValues);
    ...
    };
    

    probiert. Dann krieg ich nur
    invalid types '<unresolved overloaded function type>[unsigned int]' for array subscript
    bei meinen Zugriffsmethoden.



  • mase schrieb:

    Noch einen Fehler hab ich.

    class cConfigEntry
    {
    	public:
    	~cConfigEntry()
    	{
    	}
    	private:
    	cConfigEntry()
    	{
    		NumberOfValues=1;
    	}
    	cConfigEntry(unsigned _NumberOfValues):NumberOfValues(_NumberOfValues)
    	{
    	}
    	unsigned NumberOfValues;
    	std::vector<std::string>Value(NumberOfValues);
    ...
    };
    

    ergibt, dass NumberOfValues kein Typ sei.

    Richtig, weil die Syntax falsch ist. Lies doch bitte die bisherigen Postings durch. dort findest Du:

    Werner Salomon schrieb:

    class cConfigEntry
    {
    public:
    
    private:
        explicit cConfigEntry( unsigned NumberOfValues )
            : m_values( NumberOfValues )
        {}
        // -- Members
        std::vector< std::string > m_values;
        friend class cConfigFile;
    };
    

    In Zeile 10 ist 'm_values' als ein Member der Klasse cConfigEntry deklariert - nicht mehr und nicht weniger. Und erst im Konstruktor von cConfigEntry (in Zeile 7) wird das Objekt 'm_values' der Klasse std::vector< std::string > angelegt und in diesem Fall mit der Anzahl der Elemente initialisiert.

    Gruß
    Werner



  • Ihr werdet es nicht glauben!
    Jetzt hab ich's geschnallt, und es funktioniert jetzt auch bei mir!
    Danke für eure Geduld!


Anmelden zum Antworten