Variabel über Funktion übergeben
-
bool Funktionen::Uebergeben(string & uebergabeWert, string const & version) { // | ~ Referenz, ist ~~~~~ Wert wird nicht geändert. // | leichter zu verwenden // \-> Kein Ü verwenden! Besser Ue! std::cout << version << endl; uebergabeWert = "HALLO"; }
-
krümelkacker schrieb:
Das heißt "Variable" und nicht "Variabel".
Schweizerdeutsch

krümelkacker schrieb:
Was ist "Funktionen"? Ein Namensraum? Das Ü ist hier nicht erlaubt.
Funktionen ist eine Klasse. Ist nur Beispielcode, das ganze wird in einem grösseren Projekt verwendet. Habs nur schnell schnell hier reingepostet.
krümelkacker schrieb:
Das Semikolon hinter ) ist da falsch
Du schaust den falschen Code an, hab ihn ja neu gepostet.
krümelkacker schrieb:
Wenn Du möchtest, dass in dem std::string-Objekt, worauf der Zeiger zeigt, die Zeichenkette HALLO gespeichert werden soll, dann musst Du den Zeiger dereferenzieren
*uebergabeWert = "HALLO";und mit einem Semikolon abschließen.
Also so: ?
string uebergabewert; *uebergabeWert = "HALLO";krümelkacker schrieb:
Du hast WERT auch nicht initialisiert. Es wäre also ein Zeiger, dessen aktueller (schrottiger) Wert nicht benutzt werden darf.
Für "functions" sehe ich keine Deklaration.wieder mit :
string *Wert = "js"?
-
TTS schrieb:
[...Nonsens...]
krümelkacker schrieb:
...Aber viel wichtiger: Schnapp Dir erstmal ein gutes C++ Buch und lerne. Du kannst nicht erwarten, dass Dir in einem Forum C++ von Grund auf beigebracht wird. (!)
-
krümelkacker schrieb:
...Aber viel wichtiger: Schnapp Dir erstmal ein gutes C++ Buch und lerne. Du kannst nicht erwarten, dass Dir in einem Forum C++ von Grund auf beigebracht wird. (!)
Ich hab ein Buch, jedoch steht nicht das drin, was ich suche. Und ausserdem muss das wohl ein 5000 Seiten Buch sein, wenn nicht einmal erfahrene C++ Programmierer dieses Problem lösen können

-
Auf deine Frage:
#include <iostream> #include <string> using namespace std; void foo(string *wert) { cout << *wert; } int main() { string *str; *str = "test"; foo(str); cin.get(); return 0; }
-
#include <string> int main() { string *str; *str = "test"; }Wird mit
*stringpointer = "irgendwas";(wie nennt sich "irgendwas" - literal?) automatisch Speicher beschafft und gefüllt?
-
HighLigerBiMBam: Definitiv nicht schön
Was soll der Zeiger?Edit: Es tut auch nicht das, was du willst. Du dereferenzierst str, bevor da überhaupt ein Objekt dahintersteckt.
-
Danke HighLigerBiMBam
hat mich zur Lösung geführt.
-
TTS schrieb:
krümelkacker schrieb:
...Aber viel wichtiger: Schnapp Dir erstmal ein gutes C++ Buch und lerne. Du kannst nicht erwarten, dass Dir in einem Forum C++ von Grund auf beigebracht wird. (!)
Ich hab ein Buch, jedoch steht nicht das drin, was ich suche.
Welches Buch denn? Und wonach suchst Du?
TTS schrieb:
Und ausserdem muss das wohl ein 5000 Seiten Buch sein, wenn nicht einmal erfahrene C++ Programmierer dieses Problem lösen können

Du hast das Problem einfach nur schlecht präsentiert: Ein paar Code-Fetzen mit zig Fehlern drin und ein nicht klar formuliertes Ziel.
padreigh schrieb:
#include <string> int main() { string *str; *str = "test"; }Wird mit
*stringpointer = "irgendwas";(wie nennt sich "irgendwas" - literal?) automatisch Speicher beschafft und gefüllt?"test" ist ein Zeichenketten-Literal. Abgesehen davon, dass hier ein std:: vor string fehlt, ist die Zuweisung in der letzten Zeile nicht erlaubt, da der Zeiger str nicht initialisiert wurde.
#include <string> int main() { std::string s; std::string* z = &s; // z zeigt jetzt auf das Objekt s *z = "i like pointers"; }TTS schrieb:
Danke HighLigerBiMBam
hat mich zur Lösung geführt.Glaube ich nicht.
-
TTS schrieb:
Danke HighLigerBiMBam
hat mich zur Lösung geführt.
Nicht wirklich, das gesamte Verhalten ist undefiniert! Ich habe vorhin nicht nachgedacht.
#include <iostream> #include <string> using namespace std; void foo(string *wert) { cout << *wert; } int main() { string *str = new string("test"); foo(str); delete str; cin.get(); return 0; }
-
HighLigerBiMBam schrieb:
TTS schrieb:
Danke HighLigerBiMBam
hat mich zur Lösung geführt.
Nicht wirklich, das gesamte Verhalten ist undefiniert! Ich habe vorhin nicht nachgedacht.
#include <iostream> #include <string> using namespace std; void foo(string *wert) { cout << *wert; } int main() { string *str = new string("test"); foo(str); delete str; cin.get(); return 0; }Langsam krieg ich echt Augenkrebs
Lies dir das letzte Posting von krümelkacker nochmal durch, damit du merkst, dass dynamische Speicherreservierung nicht nötig ist. Danach schmeißt du den Pointer komplett raus.
-
string s = "test";
string *str = &s;Geht auch na und :P, Stack/Heap hauptsache nichtmehr undefiniert...
-
HighLigerBiMBam schrieb:
TTS schrieb:
Danke HighLigerBiMBam
hat mich zur Lösung geführt.
Nicht wirklich, das gesamte Verhalten ist undefiniert! Ich habe vorhin nicht nachgedacht.
#include <iostream> #include <string> using namespace std; void foo(string *wert) { cout << *wert; } int main() { string *str = new string("test"); foo(str); delete str; cin.get(); return 0; }Doch Tatsächlich.
string *measurementResult = new string; string *date = new string; string *time = new string; flukeReader.GetDCVoltage(measurementResult,date, time, range, vMode, version); cout << *measurementResult, *date, *timeObwohl ich eigentlich genau das umgekehrte brauchte, als du gepostet hast. Ich habe nur eine kleine denkhilfe benötigt

-
krümelkacker schrieb:
Welches Buch denn? Und wonach suchst Du?
Ich Hab die Fourth Edition von "DEITEL's" How to program C++ (leider englisch). Ich wollte wissen wie man aus einer Funktion einen String zurückbekommt. (nicht als return value sondern über die Argumente) Aber hat ja jetzt geklappt.
krümelkacker schrieb:
Du hast das Problem einfach nur schlecht präsentiert: Ein paar Code-Fetzen mit zig Fehlern drin und ein nicht klar formuliertes Ziel.
Ja hab gemerkt, das man mit diesem Codebeispiel nicht viel anfangen kann. Werde nächstes Mal Code aus dem projekt Posten.
-
TTS schrieb:
Ich Hab die Fourth Edition von "DEITEL's" How to program C++ (leider englisch). Ich wollte wissen wie man aus einer Funktion einen String zurückbekommt. (nicht als return value sondern über die Argumente) Aber hat ja jetzt geklappt.
Dann hättest du nach Referenzen suchen sollen. Sollte wohl irgendwo ganz am Anfang stehen. asc hat schon das richtige Beispiel gezeigt.
Grüssli
-
TTS schrieb:
krümelkacker schrieb:
Welches Buch denn? Und wonach suchst Du?
Ich Hab die Fourth Edition von "DEITEL's" How to program C++ (leider englisch).
Oh, das ist eines der schlechteren Bücher. Die verlinkte Kritik bezieht sich aber auf die 3. Edition. Vielleicht ist die 4. ja etwas besser.
TTS schrieb:
Ich wollte wissen wie man aus einer Funktion einen String zurückbekommt. (nicht als return value sondern über die Argumente).
Aha! Da gibt es viele Möglichkeiten. Das einfachste ist wohl eine Referenz.
kk
-
TTS schrieb:
Ich hab ein Buch, jedoch steht nicht das drin, was ich suche.
Ich bezweifle das in einem guten C++ Buch das Thema Referenzen nicht relativ weit vorne steht (und ebenso new/delete wenn du unbedingt - was in diesem Fall imho aber Schwachsinn ist - auf den Zeiger bestehst).
TTS schrieb:
Und ausserdem muss das wohl ein 5000 Seiten Buch sein, wenn nicht einmal erfahrene C++ Programmierer dieses Problem lösen können

Was ist bitte an meinem Code verkehrt? Ich würde hier keine Zeiger verwenden, ebenso wie der zweite Parameter wenn er nur ausgegeben, aber nicht verändert werden soll, keine modifizierbare Referenz sein sollte.