finde den fehler nicht
-
Das von manni66 war in der Tat schlecht. Bitte nicht so rumerben.
-
volkard schrieb:
Das von manni66 war in der Tat schlecht. Bitte nicht so rumerben.
Nun, das wird ja in dieser allgemeinen Form immer wieder gerne erzählt, ist aber auch genauso falsch. Gefährlich wird es, wenn man so eine Objekt mit new allokiert und dann als vector löscht. Eine Konstante ist aber vollkommen unproblematisch!
Lars
-
fehler_ schrieb:
Hallo Leute,
ich bin anfänger und wollte ein wenig mit <vector> rumprobieren.fehler_ schrieb:
Jetzt inkludiere ich überall, wo ich etwas ausgebe diese util.h.
Wenn ich eine Messagebox ausgeben will, dann mache ich es einfach mit:msgbox(text[0]);Das es nicht so funktioniert habe ich nun verstanden.
Kann mir jemand sagen warum es nicht geht und wie man meine Aufgabenstellung geschickter lösen kann?Versuch doch mal eine sinnvolle Aufgabenstellung für vectoren und nicht sowas sinnfreies.
-
manni66 schrieb:
vollkommen unproblematisch!
Aber die Vererbung da ist unnötig.
Ich mag TyRoXx' Weg.
-
volkard schrieb:
manni66 schrieb:
vollkommen unproblematisch!
Aber die Vererbung da ist unnötig.
Ich mag TyRoXx' Weg.Hm, char* und ein array, das seine Größe nicht kennt und noch nicht einmal einen Endemarker enthält?
Lars
-
manni66 schrieb:
Hm, char* und ein array, das seine Größe nicht kennt und noch nicht einmal einen Endemarker enthält?
Das Array ist vom Typ const char * const (&)[2] und kennt damit seine Größe sehr wohl. Die lässt sich auch zuverlässig ermitteln, hatten wir kürzlich erst.
-
Vorschlag zur Güte:
// Header namespace foo { extern std::vector<std::string> const &array; } // Source namespace foo { namespace { struct array_initializer { array_initializer() { data.push_back("Text 1"); data.push_back("Text 2"); } std::vector<std::string> data; }; array_initializer const init; } std::vector<std::string> const &array = init.data; }
-
LordJaxom schrieb:
manni66 schrieb:
Hm, char* und ein array, das seine Größe nicht kennt und noch nicht einmal einen Endemarker enthält?
Das Array ist vom Typ const char * const (&)[2] und kennt damit seine Größe sehr wohl. Die lässt sich auch zuverlässig ermitteln, hatten wir kürzlich erst.
Wie ermittelst du die Größe innerhalb einer Funktion, wenn du das Array als Parameter übergeben hast? Hier liegt ein großer Unterschied zu std::vector: der hat eine Funktion size(), die einem die Größe liefert bzw. Iteratoren, die Anfang und Ende festlegen.
Das char* war im Übrigen als Gegensatz zu std::string gemeint. Auch der hat Vorteile gegenüber einem char*, egal ob const oder nicht.
Lars
-
manni66 schrieb:
LordJaxom schrieb:
Das Array ist vom Typ const char * const (&)[2] und kennt damit seine Größe sehr wohl. Die lässt sich auch zuverlässig ermitteln, hatten wir kürzlich erst.
Wie ermittelst du die Größe innerhalb einer Funktion, wenn du das Array als Parameter übergeben hast? Hier liegt ein großer Unterschied zu std::vector: der hat eine Funktion size(), die einem die Größe liefert bzw. Iteratoren, die Anfang und Ende festlegen.
Das funktioniert dann natürlich nicht mehr, aber das braucht man u.U. garnicht mehr. Ein solches Array kann gut als Initializer o.ä. dienen, wenn man gerade kein Boost oder keine C++0x initializer lists zur Verfügung hat.
Deshalb auch von mir ein Vorschlag zur Güte:
char const* const arrayInitializer[] = { "Text1", "Text2", "Text3" }; std::vector<std::string> const array( arrayInitializer, arrayInitializer + sizeof(arrayInitializer)/sizeof(*arrayInitializer) );Sieht zwar nicht schön aus, aber ist m.E. praktikabel.
-
LordJaxom schrieb:
Deshalb auch von mir ein Vorschlag zur Güte:
char const* const arrayInitializer[] = { "Text1", "Text2", "Text3" }; std::vector<std::string> const array( arrayInitializer, arrayInitializer + sizeof(arrayInitializer)/sizeof(*arrayInitializer) );Sieht zwar nicht schön aus, aber ist m.E. praktikabel.
Ja, wenn man Angst vor einer Ableitung hat, sollte man es so machen.
Lars