Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

19.10.2008, 15:05

Syntax Frage C++

Ich arbeite mit vector und string aus der STL.
Nun habe ich einen Vektor, dessen Inhalt verscheide Strings sind.
Wie kann ich den nun auf die Methoden der einzelnen String-Objekte zugreifen ohne den Umweg über einen separaten Zeiger zu machen.

Quellcode

1
Vektor[index].string_methode;

Geht ja nicht...

Edit:
Oha! Da muss ich mich irgendwo anders vertipp haben, den diese Methode funktioniert sehr wohl.

Sry, für das unnötige Post. :>

2

19.10.2008, 15:09

mooment, was meisnt du mit seperatem zeiger?
und wieso klappt folgendes nicht (was für einen Fehler bekommst du?):

C-/C++-Quelltext

1
2
3
std::vector<std::string> Foo;
//Vektor füllen

Foo[0].string_method;

3

19.10.2008, 15:12

Ah, da war bereits jemand so schnell :D

Ja, tut mir leid. Ich muss mich wohl woanders vertippt haben. Diese Methode geht sehr wohl!

Aber wenn wir schon dabei sind. Ne andere Frage:

Quellcode

1
filename = (char*)vArgs[0].c_str();


filname ist ein char Zeiger. Aber er ist nicht const, weil ich ihn per default zuvor schon einen String zuweise. Nur wenn das Programm mit Parametern aufgerufen wird, dann soll filename einen anderen String zugewiesen werden.

Aber ist das koscher mit dem cast von const char* zu char*, den ich da mache?

4

19.10.2008, 15:15

wenn du einem char* nen anderen char* zuweisen willst, würd ich erst mal auf den alten delete aufrufen ;)
und dann würd ich, um nen C-String zuzuweisen auch nicht den zeiger zuweisen, sondern strcpy anwenden, womit du auch keine Probleme mit const hast.

5

19.10.2008, 15:30

Zitat von »"PCShadow"«

wenn du einem char* nen anderen char* zuweisen willst, würd ich erst mal auf den alten delete aufrufen ;)

Der alte ist ne String Konstante

Quellcode

1
char* filename = "default Path";

Da dürfte es keine Probleme bezüglich Memory-Leaks geben.

Zitat von »"PCShadow"«


und dann würd ich, um nen C-String zuzuweisen auch nicht den zeiger zuweisen, sondern strcpy anwenden, womit du auch keine Probleme mit const hast.

Ich hab grad realisiert das ich auch const char* filename schreiben kann. Weil sich das const ja nicht auf den Zeiger filename bezieht, sondern auf das Object auf das der Zeiger zeigt. Folglich kann ich ja dann filename auch ein anderes "Ziel" zuweisen, auch wenn ich zuvor den Zeiger mittels const deklariert (definiert?) habe.

6

19.10.2008, 17:23

Zitat von »"neptun"«


Der alte ist ne String Konstante

Quellcode

1
char* filename = "default Path";

Da dürfte es keine Probleme bezüglich Memory-Leaks geben.

hmm...zugegeben, ich kenn mich da auch nicht soo aus...ich verwende mittlerweile nach möglichkeit std::string.

Zitat von »"neptun"«

Ich hab grad realisiert das ich auch const char* filename schreiben kann. Weil sich das const ja nicht auf den Zeiger filename bezieht, sondern auf das Object auf das der Zeiger zeigt. Folglich kann ich ja dann filename auch ein anderes "Ziel" zuweisen, auch wenn ich zuvor den Zeiger mittels const deklariert (definiert?) habe.

das wäre natürlich auch eine möglichkeit, aber damit verweist dein Zeiger afaik immer noch auf den internen C-String von vArgs[0].c_str(), sprich, wenn vArgs futsch ist, ist auch dein Zeiger ungültig, dafür gibt es ja strcpy.

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

7

19.10.2008, 17:39

wenn dann wohl eher sowas wie strdup, aber das erstellt eine Kopie die man per delete[] löschen sollte.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

8

19.10.2008, 19:47

Zitat von »"PCShadow"«

wenn du einem char* nen anderen char* zuweisen willst, würd ich erst mal auf den alten delete aufrufen ;)

Damit dann beide Zeiger auf nun ungültigen Speicher zeigen? hmmmm

Benutzt doch einfach std::string's, da hat man den ganzen Umstand net, man hat immer passend Speicher und muss sich keine Sorgen mehr machen.
Lieber dumm fragen, als dumm bleiben!

Faule Socke

Community-Fossil

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

9

19.10.2008, 22:26

Ich seh das problem des thread grad net, warscheinlich weil sich keiner entscheiden kann, was er will^^

C-/C++-Quelltext

1
2
char *pcString = "Test"; // Geht

char *pc2 = pcString; // Geht auch


Und ich würde auf keinen fall sowas wie

C-/C++-Quelltext

1
delete pcString;


machen, das geht warscheinlich in die hose, soweit ich weiss legt der compiler nämlich das ziel von pcString im statischen speicher ab und nicht aufm heap.

Socke

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

19.10.2008, 22:49

Zitat von »"Faule Socke"«

[...] das geht warscheinlich in die hose, soweit ich weiss legt der compiler nämlich das ziel von pcString im statischen speicher ab und nicht aufm heap.


korrekt. das geht sogar sicher in die hose...

Werbeanzeige