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 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:62: 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:58: 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:62: undefined reference toOut_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 );


Anmelden zum Antworten