QString = String + int nur wie?
-
Hallo
Ich bin noch ziemlich neu in C++. Ich probiere gerade etwas an Qt (4.3.2) herum. Funktioniert eigentlich alles wunderbar, bis auf eine sache:
Ich habe einen string zb: "mein text"
und eine Zahl zb: 5
Nun möche ich einen QString haben, in dem "mein text5" drin steht. Doch irgendwie will das nicht klappen? Ich probiere schon Stunden. Bin für jeden Tipp dankbar.
Fehler:
/home/planetenkiller/cpp-Projects/tutor/src/out-gui.cpp:58: undefined reference toOut\_Gui::IntToString(std::basic\_string<char, std::char_traits<char>, std::allocator<char> >, int)' /home/planetenkiller/cpp-Projects/tutor/src/out-gui.cpp:62: undefined reference to
Out_Gui::IntToString(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int)'
/home/planetenkiller/cpp-Projects/tutor/src/out-gui.cpp:58: undefined reference toOut\_Gui::IntToString(std::basic\_string<char, std::char_traits<char>, std::allocator<char> >, int)' /home/planetenkiller/cpp-Projects/tutor/src/out-gui.cpp:62: undefined reference to
Out_Gui::IntToString(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int)'Momentan habe ich folgendes:
out-gui.hpp#ifndef _OUT_GUI_HPP_ #define _OUT_GUI_HPP_ #include <QPushButton> #include <vector> #include <QObject> #include <QWidget> #include "logik.hpp" #include "my-button.hpp" class Out_Gui : public QObject { Q_OBJECT public: static std::string IntToString(std::string, int); Out_Gui(MLogik *logik, int argc, char *argv[]); protected: private: }; #endif // _OUT_GUI_HPP_
out-gui.cpp
#include "out-gui.hpp" #include "my-button.hpp" #include <QString> #include <QGridLayout> #include <QApplication> #include <QWidget> #include <QObject> #include <QHBoxLayout> #include <QVBoxLayout> #include <QGroupBox> #include <QLabel> #include <string> #include <cstdlib> #include <sstream> static std::string IntToString(std::string s, int i) { std::ostringstream temp; std::string str; temp << s << i; str = temp.str(); return str; } Out_Gui::Out_Gui(MLogik *logik, int argc, char *argv[]) { std::string temps = Out_Gui::IntToString("Minen: ", 5); // Zeile 58 QString temp(temps.c_str()); QLabel *labelMinen = new QLabel(temp); QString temp2(Out_Gui::IntToString("Felder: ", 5).c_str()); // Zeile 62 QLabel *labelFelder = new QLabel(temp2); }
Meine Umgebung:
Ubuntu 7.10
Anjuta IDE
-
static std::string IntToString(std::string s, int i) { std::ostringstream temp; std::string str; temp << s << i; str = temp.str(); return str; }
-->
static std::string Out_Gui::IntToString(std::string s, int i) { std::ostringstream temp; std::string str; temp << s << i; str = temp.str(); return str; }
Danach sollte es stimmen.
Eventuell muss noch das static weg.
-
Wow
Ihr seit ja fix
ahh jetzt sehe ich meinen Fehler. Da kann ich die Funktion ja lange umbauen, wenn die Signatur nicht stimmt
Vielen Dank, es geht jetzt.
Eventuell muss noch das static weg.
oh, da habe ich wohl die Doku etwas schnell überflogen. Das static ist wohl nur in der out-gui.hpp nötig. Noch mal Danke
mfg Planetenkiller
-
planetenkiller schrieb:
Wow
Ihr seit ja fix
ahh jetzt sehe ich meinen Fehler. Da kann ich die Funktion ja lange umbauen, wenn die Signatur nicht stimmt
Vielen Dank, es geht jetzt.
Eventuell muss noch das static weg.
oh, da habe ich wohl die Doku etwas schnell überflogen. Das static ist wohl nur in der out-gui.hpp nötig. Noch mal Danke
mfg Planetenkiller
Ich würde nicht den Weg über stringstream gehen.
Sowas sollte auch gehen: QString qs = QString(string.c_str()) + QString::number(number);
-
Die Standardlösung von Qt wäre
QString l_result = QString( "Minen: %1" ).arg( 5 );Die Lösung mit:
QString l_result = QString( "Minen: " ) + QString::number( 5 );
hat den Nachteil dass eine Internationalisierung Schwierigkeiten macht.-> unter der Voraussetzung dass die Klasse irgendie von QObject ableitet:
QString l_result = tr( "Minen: %1" ).arg( 5 );