Referenz auf String Objekt



  • silent_max schrieb:

    Wie macht ihr es eigentlich, dass ihr so viel Ahnung vom Programmieren in C++ habt??

    * Bücher lesen & verstehen
    * Jahrelange Erfahrung



  • daddy_felix schrieb:

    silent_max schrieb:

    Wie macht ihr es eigentlich, dass ihr so viel Ahnung vom Programmieren in C++ habt??

    * Bücher lesen & verstehen
    * Jahrelange Erfahrung

    + Forum 🙂



  • daddy_felix schrieb:

    * Bücher lesen & verstehen
    * Jahrelange Erfahrung

    das mit der erfahrung glaube ich nicht. sone ist doch noch en junger spund, der kA vielleicht grad die oberstufe besucht...

    aber ich kann dem zustimmen. und wenn man hier im forum einfach nur lauscht kriegt man viel mit.

    und mit programmiersprachen ists wie mit normalen sprachen: mit der zeit nutzt man sie anders, es werden dialekte entwickelt und best practices und so weiter

    das kommt alles mit der zeit. ich hätte früher auch fast für jedes bisschen gefragt wie du. aber man kann das fast alles auch mit probieren rauskriegen (oder google)



  • Seid ihr hauptberuflich C++ Programmierer??

    Trotzdem hätte ich noch eine Frage.

    Ich wollte einen konstanten Text per Referenz ausgeben.

    Dazu folgender Code:

    #include<iostream>
    #include<string>
    using namespace std;
    
    string Text(string const Eingabe)//Definition der Funktion Text mit konstanem String
    {
    	Eingabe == "Dies ist ein konstanter Text!\n"; //Den Text per Eingabe definieren
    	return Eingabe; //Rückgabe von Eingabe
    }
    
    int main()
    {
    	string Eingabe; //Definition der Stringvariablen Eingabe
    	string &Text_1=Text(Eingabe); //Initialisierung der Referenzvariablen Text_1 mit Text(Eingabe)
    	cout << Text_1 << "\n"; //Ausgabe des konstanten Textes
    
    	return 0;
    }
    

    In der Ausgabe erscheint aber gar nichts.

    Was habe ich falsch gemacht?



  • silent_max schrieb:

    Seid ihr hauptberuflich C++ Programmierer??

    Ich bin Softwareentwickler und arbeite derzeit hauptsächlich mit C++ und ein wenig mit Erlang

    silent_max schrieb:

    Was habe ich falsch gemacht?

    Du hast den Debugger nicht verwendet. Dann hättest du gesehen, dass die Zuweisung "Eingabe == "Dies ist ein konstanter Text!\n";" offensichtlich nciht das macht, was du erwartest...

    Wenn du den Fehler korrigiert hast, wird der Compiler meckern, dass er einem konstanten Objekt ncihts zuweisen kann.

    Warum übrgibst du überhaupt den String als Referenz und gibst ihn als Rückgabewert dann wieder zurück?



  • So... Jetzt funktioniert es, habe gerade auch den Debugger benutzt:

    #include<iostream>
    #include<string>
    using namespace std;
    
    string Text(string )//Definition der Funktion Text mit konstanem String
    {
    	string const Eingabe = "Dies ist ein konstanter Text!\n"; //Den Text per Eingabe definieren
    	return Eingabe; //Rückgabe von Eingabe
    }
    
    int main()
    {
    	string Eingabe; //Definition der Stringvariablen Eingabe
    	string &Text_1=Text(Eingabe); //Initialisierung der Referenzvariablen Text_1 mit Text(Eingabe)
    	cout << Text_1 << "\n"; //Ausgabe des konstanten Textes
    
    	return 0;
    }
    

    Kommen eigentlich in der Praxis Referenzen auf Strings häufig vor??



  • So... Jetzt funktioniert es, habe gerade auch den Debugger benutzt:

    Aber wohl nicht dein Hirn.

    Kommen eigentlich in der Praxis Referenzen auf Strings häufig vor??

    Du stellst Fragen...
    Es kommt einfach da vor, wo es vorkommt.

    #include<iostream>
    #include<string>
    using namespace std;
     
    string Text(string )//Definition der Funktion Text mit konstanem String
    {
        string const Eingabe = "Dies ist ein konstanter Text!\n"; //Den Text per Eingabe definieren
        return Eingabe; //Rückgabe von Eingabe
    }
     
    int main()
    {
        string Eingabe; //Definition der Stringvariablen Eingabe
        string &Text_1=Text(Eingabe); //Initialisierung der Referenzvariablen Text_1 mit Text(Eingabe)
        cout << Text_1 << "\n"; //Ausgabe des konstanten Textes
    }
    

    ???

    • Wieso hat Text() einen Parameter, den du gar nicht verwendest?
    • Wieso hast du schon wieder eine Referenz auf den Rückgabewert der Funktion Text?
      wtf?


  • Sone schrieb:

    • Wieso hat Text() einen Parameter, den du gar nicht verwendest?
    • Wieso hast du schon wieder eine Referenz auf den Rückgabewert der Funktion Text?
      wtf?

    Wie würdest es denn Du programmieren? Zeige mir bitte ein Beispiel, wie Du eine Referenz auf ein String Objekt anlegst?



  • @silent_max: Bitte, bitte mach erstmal nicht mit C++ weiter. Mach C! Lerne von unten nach oben. Diese "high level" concepte liegen dir (noch) nicht.

    Ich kann absolut nicht nachvollziehen was dir durch den Kopf geht wenn du deinen Code schreibst (was nich schlimm ist), außer dass du wirklich keine Vorstellung davon hast was da passiert wenn ne Funktion aufgerufen wird usw. Lerne diese Sachen, das wird dir helfen. Meinetwegen fang auch mit Assembler an ... halt irgendwas damit du und dein Computer sich besser verstehen 🙂



  • silent_max schrieb:

    Wie würdest es denn Du programmieren? Zeige mir bitte ein Beispiel, wie Du eine Referenz auf ein String Objekt anlegst?

    Sone hat bereits ein Beispiel gepostet, ich ebenfalls.



  • ScottZhang schrieb:

    @silent_max: Bitte, bitte mach erstmal nicht mit C++ weiter. Mach C! Lerne von unten nach oben. Diese "high level" concepte liegen dir (noch) nicht.

    Sorry, aber ich kann das Fach Datenverarbeitungstechnik, in dem ich bald am 23.01.2013 eine Schulaufgabe schreibe und im Mai/Juni Abschlussprüfung schreibe, nicht einfach abwählen...

    Zwar würde ich gern das Fach abwählen und einen Cut machen, damit ich mit Assembler anfangen kann da mich die µC - Technik mehr interessiert, aber ich kann wie geschrieben das Fach Datenverarbeitungstechnik, in dem C++ einen großen Bestandteil hat, nicht einfach abwählen.



  • Na dann lern das weiter, aber guck dir trotzdem die low level Funktionalität eines Computers an.



  • mach auf keinen fall C vor C++, da gewöhnst du dir ganz ganz böse sachen an, wofür es in C++ bessere alternativen gibt



  • Aufgeben ist auch immer eine Möglichkeit.
    Momentan sehe ich keinen signifikanten Fortschritt hinsichtlich deiner C++-Fertigkeiten.

    Natürlich ist der Anfang immer das schwerste.
    Ich habe es geschafft, die anderen haben es geschafft.
    Einige, wie du Max, schaffen ihn nicht. Sie versuchen es - immer wieder - erfolglos.
    Man versucht ihnen die Sachverhalte durch verschiedene Erläuterungen näher zu bringen. Aber nach Seiten über Seiten von Threads über Threads kommen dann, zur großen Enttäuschung Aller, wieder dieselben Fragen wie die aus dem Ursprungspost.

    Ich zitiere mal einen sehr guten Text von einem alten Forenuser, c.rackwitz, und markiere für dich wichtige Passagen entsprechend:

    <a href= schrieb:

    RTFM! oder warum dir keiner helfen will... ">Hi.
    Wenn du dir einen Gefallen tun willst, dann lies diesen [Text] bitte vollstaendig, denn dann kannst du uns helfen, dir zu helfen. Danke.

    Du wurdest auf diesen [Text] verwiesen, weil du es jemandem schwer machst, dir zu helfen.
    Eigentlich ist doch alles in Ordnung, denn du willst Hilfe und wir wollen dir helfen.
    Aber! Wenn alles in Ordnung waere, dann wuerdest du diesen [Text] garnicht lesen.
    Zumindest liest du diesen [Text] gerade, denn wuerdest du ihn ignorieren, waere fuer dich schon alle Hoffnung verloren.

    Grundsaetzlich solltest du verstehen, dass wir dir freiwillig helfen und uns nichts dazu verpflichtet, auch nur ein Wort mit dir zu wechseln. Also sei dankbar, dass wir dir aus Hilfsbereitschaft, Langeweile oder welchem Grund auch immer helfen wollen.

    Du solltest bereit sein, uns ein Stueck entgegenzukommen. Dazu gehoert, dass du zwar Hilfe bei deinen Hausaufgaben bekommst, sie aber dennoch selbst machen musst. Unter "Hausaufgaben" verstehen wir auch, dass du dein Buch/Tutorial/Kurs aufmerksam verfolgst und keine voreiligen Experimente unternimmst.

    Wenn du selber Code schreibst, musst du ihn auch verstehen. Code ist kein Haufen von wahllos zusammengeschmissenen Buchstaben und Zeichen, Code ist Logik pur. Du musst genau wissen, warum du wo und welches Zeichen setzt.

    Wenn du Code postest, dann bitte nur ein kleines darstellendes Programm, welches man sofort und ohne Umwege kompilieren kann. An dieser kleinen Demo soll dein Problem klar dargestellt sein. Die Demo darf keinen Code enthalten, der nicht am Problem beteiligt ist (abgesehen von allem, was zu einem kompilierbaren Programm gehoert).

    Gib immer mit an:
    [...]
    - was du schon versucht hast, um das Problem zu beheben...
    - ...und was davon wie ausgegangen ist
    - welche anderen Quellen du nach hilfreichen Informationen abgesucht hast...
    - ...was du gefunden hast und...
    - ...warum du das gefunden hast, was du gefunden hast ("ich finde nichts bei google" ist daemlich)

    Ich habe dir bei Weitem nicht alles genannt, was du fuer uns tun kannst.
    Wenn dir wirklich etwas an deiner Hilfe gelegen ist, lies bitte hier weiter:
    http://www.tty1.net/smart-questions_de.html

    Nach diesem Post findest du noch weitere Posts von anderen Helfenden, die einiges genauer darstellen oder erg[ä]nzen. Es w[ä]re nett von dir, diese auch zu lesen.

    im Namen aller Helfenden danke ich dir f[ü]r deine Zeit

    Schlechte Lehrer sind ein Fluch - wir kennen das alle nur allzu gut.
    Aber trotzdem bleibt immer die Möglichkeit, große Eigeninitiative zu zeigen.
    Das tust du nicht im Geringsten. Den statt ein Buch durchzuarbeiten, Google zu befragen, leicht komplizierere Fachtexte oder Code-Ausschnitte langsam, Stück für Stück zu lesen und verstehen klaust du die Zeit freiwilliger, gutmütiger Forenuser.



  • Skym0sh0 schrieb:

    int main()
    {
        std::string a("Hallo");
        std::string & ref = a;
    
        ref += " Welt";
    
        std::cout << a==ref << std::endl;
        std::cout << a << std::endl << ref << std::endl;
    
        return 0x0;
    }
    

    Wenn ich den Code so eingebe wie Skym0sh0 als Beispiel vorgeschlagen hat, dann bekomme ich bezogen auf die Zeile 8 die Meldung

    Error: Kein "<<"-Operator
    stimmt mit diesen Operanden überein
    


  • Du musst den Vergleichsausdruck in Klammern setzen.

    Der Gleichheitsoperator ( == ) bindet schwächer als die überladenen Shift-Operatoren ( >> , << ).

    Edit: Meine Orthographie.

    Edit²: Und bitte lies meinen Post. Ich habe zurecht das ungute Gefühl, dass du das noch nicht getan hast.



  • Skym0sh0 schrieb:

    mach auf keinen fall C vor C++, da gewöhnst du dir ganz ganz böse sachen an, wofür es in C++ bessere alternativen gibt

    Wenn das bei ihm mit C++ klappen würde, hätte ich das auch gesagt. Aber offensichtlich versteht die "abstrakten" Konzepte kein Stück.
    Keine Ahnung wie sein Gehirn funktioniert ... aber manchmal ist es halt sinnvoll von unten nach oben zu lernen und nicht andersrum.



  • ScottZhang schrieb:

    Skym0sh0 schrieb:

    mach auf keinen fall C vor C++, da gewöhnst du dir ganz ganz böse sachen an, wofür es in C++ bessere alternativen gibt

    Wenn das bei ihm mit C++ klappen würde, hätte ich das auch gesagt. Aber offensichtlich versteht die "abstrakten" Konzepte kein Stück.
    Keine Ahnung wie sein Gehirn funktioniert ... aber manchmal ist es halt sinnvoll von unten nach oben zu lernen und nicht andersrum.

    okay, auch wieder wahr. ja, ich vergesse manchmal, dass man programmieren und das denken dahinter nicht von vornerein kann. wie auto oder fahrrad fahren, das muss man auch erst lernen



  • Skym0sh0 schrieb:

    wie auto oder fahrrad fahren, das muss man auch erst lernen

    Beides ist zum vorwärtskommen. Für beides musst du die Verkehrsregeln kennen.
    Nur silent_max würde mit dem Auto an den rot-weißen Pfosten am Fahrradweg hängen beiben, weil es dann doch Unterschiede gibt. 😃



  • Und tada. Posts über Lernvermögen und -weise mal eingenommen, ist ein Thread über ein simples Thema wieder 5 Seiten lang. Und es werden, ich wette, noch zehn.


Anmelden zum Antworten