String kopieren in QT 5.01

Cuba Libre

Grünschnabel
Hallo, ich überlege gerade, auf Qt umzusteigen und habe mich deshalb ein wenig damit beschäftigt. Ich wollte eine kleine Konsolenanwendung schreiben, deren Quellcode ich später auch in einer GUI verwenden möchte. Das Programm soll zum Speichern und Abfragen von Vokabellisten dienen. Ich scheiter allerdings schon an der ersten Methode.

Ich habe eine Klasse CVokabeln erstellt, die die Methode Vokabel_adden enthält. Darin soll im Moment eigentlich nur ein vom User eingegebener String in einen anderen kopiert werden.

C++:
class CVokabeln
{
public:
   std::string Vokabel_adden(std::string Vokabel)
   {
       std::string n;
       strcpy(n, Vokabel);      //Hier scheint der Fehler zu sitzen
       return n;
   }


};
CVokabeln v1;

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    std::string Vokabel;
    std::cin >> Vokabel;
    v1.Vokabel_adden(Vokabel);


    return 0;
}

Ich bekomme allerdings beim Compilieren die Fehlermeldung

C++:
D:\ProgramFiles(x86)\Qt\Qt5.0.1\Tools\QtCreator\bin\1versuch\main.cpp:24: Fehler:cannot convert 'std::string {aka std::basic_string<char>}' to 'char*' for argument '1' to 'char* strcpy(char*, const char*)'

Versucht er hier, meine Strings in char's umzuwandeln? Wozu das ganze?
Lieber wäre mir natürlich, die übergebenen Strings in einer StringList zu speichern, Qt bietet dafür QStringList an, allerdings bin ich noch nicht sicher, ob ich das GUI-Programm damit mache.
//Edit1: Meine ganzen Strings waren vorher schonmal char's, was mir nur noch mehr Fehlermeldungen brachte.

Und falls mir jemand erklären kann, wie ich mit der Konsole eine Textdatei generiere, in der ich die Einträge speicher, wäre ich auch dafür sehr dankbar.

Gruß Cuba
 
Zuletzt bearbeitet:
Hallo,

Wenn du Qt nutzt, kann ich dir empfehlen auch die eigene Klasse QString zu nutzen, da auch alle anderen Qt-eigenen Klassen QString verstehen werden und sie einige hilfreiche Funktionen bietet. Solltest du weiterhin die Standardklasse String nutzen wollen ist dies allerding auch kein Problem, da sich alle Strings zu QString konvertieren lassen (und umgekehrt). Hauptsache dabei ist, dass du dabei konsistent arbeitest, sonst kommst du durcheinander.
Desweiteren, wenn du etwas in einen String schreiben willst solltest du auch die dafür bereitgestellten Funktionen nutzen. Hier ist z.B. eine Funktion zum anhängen an einen String.

Grüße Jennesta
 
Danke für den Hinweis von Jennesta. Ich habe das Programm jetzt erstmal zum Laufen gebracht. Es funktioniert auch fast so wie es sollte. Hier erstmal der Quellcode.

C++:
#include <QCoreApplication>
#include <iostream>
#include <stdlib.h>
#include <string.h>


//Klasse
class CVokabeln
{
public:
    //----------------------------------------------
    std::string get_n()
    {
    return n;
    }
    //----------------------------------------------
   std::string Vokabel_adden(std::string Vokabel)
   {
        n.append(Vokabel);
        return n;
   }
    //----------------------------------------------

protected:
   std::string n;

};
//----------------------------------------------
CVokabeln v1;

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    std::string Vokabel;
    std::cout<<"Vokabel: "; std::cin>>Vokabel;
    v1.Vokabel_adden(Vokabel);
    std::cout <<"\n n = " <<v1.get_n()<<std::endl;


    return 0;
   // return a.exec();
}

Die Ausgabe:
Code:
Vokabel: Hans
n = Hans

Soweit so gut. Wenn ich nun aber sowas wie "Hans im Glück" eingebe, ist n immernoch Hans.
Was läuft hier schief? Kann mir da jemand weiterhelfen?
 
Was du momentan betreibst ist keine Qt-Entwicklung sondern mit der Console und der STD-Lib rumspielen. Von daher die Frage: was erhoffst du dir durch den Umstieg?
Entgegen Jennesta Aussage sage ich entweder ganz oder gar nicht.

Soweit so gut. Wenn ich nun aber sowas wie "Hans im Glück" eingebe, ist n immernoch Hans.
Was läuft hier schief? Kann mir da jemand weiterhelfen?
std::cin liest nur bis zum nächsten Leerzeichen/Return.

Schau dir mal das hier an:
http://www.lubby.org/ebooks/qtconsoleapp2/qtconsoleapp2.html
 
Hallo veeman.
Mir ist klar, dass der Code hier nichts besonderes ist. Es ging mir darum, ein Gefühl fürs Framework zu bekommen und zu gucken, welche Features es bietet oder eben nicht bietet. Bis jetzt geht mir mit dem Qt Creator das Schreiben ziemlich angenehm von der Hand.
Ich werde mir den Link auf jeden Fall mal durchlesen. Und cin wurde jetzt durch getline() ersetzt.
Damit läuft die Funktion wie gewünscht. Vielen Dank für eure Hilfe
 

Neue Beiträge

Zurück