elis88 Δημοσ. 18 Ιουνίου 2008 Δημοσ. 18 Ιουνίου 2008 Γεια σας, συγνώμη αν σας έχω ζαλίσει λίγο το τελευταίο καιρό. Αντιμετωπίζω το εξης πρόβλημα. Προσπαθώ να επιστρέψω ενα String από μία μέθοδο. Όταν το return συνδέει δύο String όλα λειτουργούνε κανονικά, όταν όμως πάω να χώσω και έναν ακέραιο μέσα τότε μου βγάζει compile error. Πως διορθώνεται αυτό; Μιλάμε βέβαια για C++.
Directx Δημοσ. 18 Ιουνίου 2008 Δημοσ. 18 Ιουνίου 2008 Θα μπορούσες να χρησιμοποιήσεις το std::stringstream το οποίο επιτρέπει την διαχείριση ενός char πίνακα ως stream και την άμεση μετατροπή αυτού σε STL string μορφή. Στο παρακάτω παράδειγμα, ορίζουμε ένα stringstream (strBuffer) και περνάμε σε αυτό με την βοήθεια των τελεστών << δυο STL strings (strA & strB) χωρίζοντας μεταξύ τους με την προσθήκη ενός αριθμού (nMyNumber). Ύστερα ζητάμε από την stringstream να μας επιστρέψει το περιεχόμενο της σε μορφή strings με την μέθοδο .str() αποθηκεύοντας το νέο string στην (string..) μεταβλητή strFinalStr την οποία εκτυπώνουμε στην έξοδο (οθόνη). > //-stringstream demo -directx------------------------------------------------ #include <iostream> #include <sstream> #include <string> #ifdef __BORLANDC__ #pragma hdrstop #endif //--------------------------------------------------------------------------- #ifdef __BORLANDC__ #pragma argsused #endif int main(int argc, char* argv[]) { std::stringstream strBuffer; std::string strA = "This is String A", strB = "This is String B"; int nMyNumber = 2008; // Pass strA, then a <Number> and strB on strBuffer (stringstream) strBuffer << strA << " <" << nMyNumber << "> " << strB; // Return strBuffer (stringstream) as STL string (.str() method) std::string strFinalStr = strBuffer.str(); // Print it on stdout ... std::cout << strFinalStr; return 0; } //--------------------------------------------------------------------------- Ο κώδικας δοκιμάσθηκε σε CodeGear Turbo C++ Explorer.
georgemarios Δημοσ. 18 Ιουνίου 2008 Δημοσ. 18 Ιουνίου 2008 θες να μας βαλεις εδω τον κωδικα σου καθως και το compile error? για ποιο string implementation μιλαμε?
elis88 Δημοσ. 18 Ιουνίου 2008 Μέλος Δημοσ. 18 Ιουνίου 2008 Αυτος είναι ο κώδικας: > #include <string> using namespace std; class race { private: string rcode; int maxmembers; int diflevel; double fee; string description; public: race(string rcode1, int maxmembers1, int diflevel1, double fee1, string description1) { maxmembers = maxmembers1; diflevel = diflevel1; fee = fee1; rcode = rcode1; description = description1; } public: void setRcode(string c) { rcode = c; } public: void setMaxmembers(int m) { maxmembers = m; } public: void setDifLevel(int d) { diflevel = d; } public: void setFee(double f) { fee = f; } public: string getRaceDetails() { return rcode + description; } }; στο string getRaceDetails() θέλω να έχω ένα presentation σε string για όλα τα πεδία. Απ΄ ότι φένεται στι C++ δεν είναι τόσο απλά τα πράγματα όσο στη java. Ευχαριστώ directx για το κώδικα... θα το δοκιμάσω.
Directx Δημοσ. 18 Ιουνίου 2008 Δημοσ. 18 Ιουνίου 2008 Αυτό, για παράδειγμα, σε καλύπτει; (περνώ άμεσα όλες τιμές σου στο stringstream και σου επιστρέφω ένα string σε μορφή όνομα: τιμή \n όνομα: τιμή ... ). > public: string getRaceDetails() { stringstream strBuffer; strBuffer << "RCODE: " << rcode << endl; strBuffer << "MAXMEMBERS:" << maxmembers << endl; strBuffer << "DIFLEVEL: " << diflevel << endl; strBuffer << "FEE:" << fee << endl; strBuffer << "DESCRIPTION: " << description << endl; return strBuffer.str(); } Υ.Γ. Ο αρχικός σου κώδικας περνά κανονικά από τον compiler μου, όσο βέβαια δεν δοκιμάζεις να περάσεις κάποιο integer.
elis88 Δημοσ. 19 Ιουνίου 2008 Μέλος Δημοσ. 19 Ιουνίου 2008 Να σου κάνω μια ερώτηση. Η συνάρτηση str() τι κάνει; επιστρέφει την τιμή σε κανονικό string;
Directx Δημοσ. 19 Ιουνίου 2008 Δημοσ. 19 Ιουνίου 2008 Ναι, όπως έγραψα και στο πρώτο post, επιστρέφει το stringstream ως string.
georgemarios Δημοσ. 19 Ιουνίου 2008 Δημοσ. 19 Ιουνίου 2008 stringstream::str() το βαζω πιο πολυ για να κανεις bookmark τη σελιδα. Εκει μπορεις να ψαχνεις για οτι συναρτηση θες να μαθεις τι κανει.... καλη συνεχεια
elis88 Δημοσ. 19 Ιουνίου 2008 Μέλος Δημοσ. 19 Ιουνίου 2008 Ευχαριστώ πολύ παιδιά. Σας είμαι ευγνώμον.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.