string array dynamisch anlegen
-
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 mitcConfigEntry::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!