ICheats Δημοσ. 24 Μαρτίου 2013 Δημοσ. 24 Μαρτίου 2013 (επεξεργασμένο) Γεια σας παιδιά! Προσπαθώ να λύσω ένα πρόβλημα, έχω ένα αρχείο, το διαβάζω χρησιμοποιώντας ένα string, και ελέγχω εαν μέσα σε αυτό το string υπάρχει το text "<br>"! εάν το βρει τότε να περάσει αυτό το string σε μια άλλη μεταβλητή και από αυτή να αφαιρέσαι το "<br>" χωρίς να πειράξει το υπόλοιπο περιεχόμενο! έχω αυτό εδώ τον κώδικα! έχω ψάξει και σε ιστοσελίδες αλλά ακόμα δεν έχω καταφέρει να κάνω κάτι. Επίσης όλος ο κώδικας δουλεύει μέχρι #include <iostream> #include <string> #include <fstream> using namespace std; ifstream levelRead; string readLevel; string askLevel; int lines = 0; int lengthOf; int length = 0; int main() { cout << "Type the name of the level you want to open:\n> "; cin >> askLevel; levelRead.open(("C:\\RPG\\level" + askLevel + ".lev")); if (levelRead.is_open()) { while(!levelRead.eof()) { getline(levelRead, readLevel); if (readLevel.find("<br>")) { lines++; lengthOf = readLevel.length(); length=readLevel.erase(lengthOf.first()lengthOf-3, lengthOf.last() lengthOf); } } levelRead.close(); } else cout << "File didn't open!\n"; levelRead.close(); cin.get(); cin.get(); return 0; } Επεξ/σία 28 Μαρτίου 2013 από ICheats
defacer Δημοσ. 24 Μαρτίου 2013 Δημοσ. 24 Μαρτίου 2013 τότε να περάσει αυτό το string σε μια άλλη μεταβλητή και από αυτή να αφαιρέσαι το "<br>" χωρίς να πειράξει το υπόλοιπο περιεχόμενο Δεν καταλαβαίνω από την περιγραφή ποιό είναι το αποτέλεσμα που θέλεις να έχεις.
cyberrobot Δημοσ. 26 Μαρτίου 2013 Δημοσ. 26 Μαρτίου 2013 Απ' ότι αποκρυπτογράφησα, θες να σαρώνεις κείμενο γραμμή γραμμή και θες να βγάλεις τα "\n" ( για σένα <br> ) για να έχεις ατόφιο το κέιμενο...; Χωρίς να έχω ιδιαίτερη γνώση από C++, ίσως να έχει τίποτα έτοιμο, εγώ θα έκανα το εξής : θα σκάναρα την μεταβλητή μου μέχρι να βρω <br> και στην συνέχεια θα έκανα ν-1 memcpy σε έναν buffer (μια άλλη μεταβλητή). μετά θα άλλαζα το υπόλοιπο σε μία νέα μεταβλητή ή κ την ίδια και θα επαναλάμβανα για όσες πληροφορίες έψαχνα. π.χ. κάτι στο πολύ γενικό... string a,b[3],d,e; int k; a=αδαδαδα<br>δδδαδα<br>ρερερε<br> for(i=0;i<INFO_TO_EXTRACT;i++){ k=sizeof(a); c=0; while(a[c]!=<br>){ c++; } memcpy(b[i],a,sizeof(c-1)); memcpy(a,a+c,k-c); } ελπίζω να μην το τερμάτισα αρκετά. γενικά ψάξε για text parsing.
Χάρι Πότερ Δημοσ. 26 Μαρτίου 2013 Δημοσ. 26 Μαρτίου 2013 Ισως να μπορουσε να γινει με erase: str.erase(str.find('<br>'),str.find('<br>')+4) και αν δεν θες να πειραξεις το αρχικο string strcpy(str2,str); str2.erase(str2.find('<br>'),str2.find('<br>')+4);
ICheats Δημοσ. 26 Μαρτίου 2013 Μέλος Δημοσ. 26 Μαρτίου 2013 (επεξεργασμένο) Δεν καταλαβαίνω από την περιγραφή ποιό είναι το αποτέλεσμα που θέλεις να έχεις. Απλά θέλω να σβήνω από το string που παίρνω διαβάζοντας ένα αρχείο, κάποιο μέρος του. Και αυτό το μέρος του είναι το "<br>"! όπως πολύ σωστά είπε και ο cyberrobot: Απ' ότι αποκρυπτογράφησα, θες να σαρώνεις κείμενο γραμμή γραμμή και θες να βγάλεις τα "\n" ( για σένα <br> ) για να έχεις ατόφιο το κέιμενο...; !! Πάντως λίγο πολύ πιστεύω το κατάφερα. έχει κάποια προβλήματα, αλλά δουλεύει! #include <iostream> #include <sstream> #include <fstream> using namespace std; ifstream levelRead; string readLevel; string askLevel; string contents; int lines = 0; int length = 0; int main() { cout << "Type the name of the level you want to open:\n> "; cin >> askLevel; levelRead.open(("C:\\RPG\\level" + askLevel + ".lev")); //Opens a file with custom name! if (levelRead.is_open()) { while(!levelRead.eof()) { getline(levelRead, readLevel); cout << readLevel << endl; if (readLevel.find(("<br>"))) { lines++; //We know how many lines the array will be. length = readLevel.length(); ostringstream convert; // stream used for the conversion convert << length; //now we need to delete the <br> from the string readLevel.erase(readLevel.begin()+(length-4), readLevel.end()-length); contents = readLevel; cout << contents << "\t Edited to make '<br>' disappear!!" << endl; } readLevel = " "; //For memory issues we make it nothing. } } else cout << "File didn't open!\n"; levelRead.close(); //cout << endl << contents << endl; cin.get(); cin.get(); return 0; } Το άλλο θέμα όμως είναι ότι στον φάκελο C:\RPG\ έχω δύο αρχεία. Το ένα ονομάζεται "level1.lev" και το άλλο "level2.lev"!! Μόλις τρέχω το πρόγραμμα μου ζητάει κανονικά έναν αριθμό. Που σημαίνει ότι το πρόγραμμα άμα του δώσω εγώ το 1 πχ. θα πάει και θα κάνει τα εξής: τα ανοίξει ένα ifstream με το συγκεκριμένο path: C:\RPG\level1.lev!!!! Το είχα τεστάρει να δω αν δουλεύει όλος ο κώδικας και μέχρι σήμερα δούλευε μια χαρά! Χωρίς πρόβλημα! Χθες, γράφοντας 2 στην αρχή και πάλι δεν είχε κανένα πρόβλημα. Παρότι δεν άλλαξα κάτι στο visual c++ όμως όταν πατάω 2, μου βγάζει αυτό το error: debug assertion failed Expression: string iterator + offset out of range Τι μπορεί να φταίει?? Ευχαριστώ πολύ για την υπομονή και τη βοήθεια! ΥΣ: Ο τελικός στόχος είναι το επεξεργασμένο string, δηλαδή το contents να το βάζω σε ένα char array! Ακόμη όμως δεν έχω βρει τρόπο για να το κάνω αυτό... Επεξ/σία 28 Μαρτίου 2013 από ICheats
cyberrobot Δημοσ. 26 Μαρτίου 2013 Δημοσ. 26 Μαρτίου 2013 Η συνάρτηση levelRead.open() επιστρέφει τίποτα; για δες αν όντως ανοίγει το file πάρτο βήμα βήμα...αλλά άμα δούλευε μάλλον κάπου αλλού σκαλώνει. Το εκτελέσιμο/read_file σου είναι στο ίδιο/σωστό path...;
Timonkaipumpa Δημοσ. 26 Μαρτίου 2013 Δημοσ. 26 Μαρτίου 2013 Python; Δεν είναι στις επιλογές; Δύο γραμμές κώδικα είναι η παραπάνω διαδικασία.
ICheats Δημοσ. 26 Μαρτίου 2013 Μέλος Δημοσ. 26 Μαρτίου 2013 Python; Δεν είναι στις επιλογές; Δύο γραμμές κώδικα είναι η παραπάνω διαδικασία. όχι! Η συνάρτηση levelRead.open() επιστρέφει τίποτα; για δες αν όντως ανοίγει το file πάρτο βήμα βήμα...αλλά άμα δούλευε μάλλον κάπου αλλού σκαλώνει. Το εκτελέσιμο/read_file σου είναι στο ίδιο/σωστό path...; και τα δύο μια χαρά γίνονται, το αρχείο το ανοίγει κανονικά, επίσης και τα δύο αρχειάκια είναι στο ίδιο path! Κάπου αλλού σκαλώνει! να καταλάβεις, ανοίγει το δεύτερο αρχείο, δείχνει κανονικά στην οθόνη το περιεχόμενό του και μόλις πάει να κλείσει σκαλώνει και βγάζει το πρόβλημα! Επίσης σε αυτό: να κάνω μία διευκρύνηση, σκαλώνει κάπου μέσα στο if και όχι έξω, σχετικά λογικό αφού ανοίγει το file. και τα δύο μια χαρά γίνονται, το αρχείο το ανοίγει κανονικά, επίσης και τα δύο αρχειάκια είναι στο ίδιο path! Κάπου αλλού σκαλώνει! να καταλάβεις, ανοίγει το δεύτερο αρχείο, δείχνει κανονικά στην οθόνη το περιεχόμενό του και μόλις πάει να κλείσει σκαλώνει και βγάζει το πρόβλημα!
migf1 Δημοσ. 27 Μαρτίου 2013 Δημοσ. 27 Μαρτίου 2013 (επεξεργασμένο) ... Χωρίς να έχω ιδιαίτερη γνώση από C++, ίσως να έχει τίποτα έτοιμο, εγώ θα έκανα το εξής : θα σκάναρα την μεταβλητή μου μέχρι να βρω <br> και στην συνέχεια θα έκανα ν-1 memcpy σε έναν buffer (μια άλλη μεταβλητή). μετά θα άλλαζα το υπόλοιπο σε μία νέα μεταβλητή ή κ την ίδια και θα επαναλάμβανα για όσες πληροφορίες έψαχνα. π.χ. κάτι στο πολύ γενικό... string a,b[3],d,e; int k; a=αδαδαδα<br>δδδαδα<br>ρερερε<br> for(i=0;i<INFO_TO_EXTRACT;i++){ k=sizeof(a); c=0; while(a[c]!=<br>){ c++; } memcpy(b[i],a,sizeof(c-1)); memcpy(a,a+c,k-c); } ελπίζω να μην το τερμάτισα αρκετά. γενικά ψάξε για text parsing. Παραθέτω και κάτι πιο εξειδικευμένο απλά για να υπάρχει, αλλά μονάχα αν η εκφώνηση απαιτεί την χρήση c-strings (αλλιώς η std::string.erase() που υπέδειξε ο Χάρι Πότερ και χρησιμοποίησε κι ο topic-starter είναι μακράν πιο εύστοχη λύση) Το βάζω σε C, γιατί σε C++ σίγουρα θα το κάνω λάθος #include <stdio.h> #include <stdlib.h> #include <string.h> /* ---------------------------------------------- */ int s_del_word( char *s, const char *word ) { char *cp = s; /* set a pointer at start of s */ char *cpEnd = NULL; size_t lenWord = 0; int ret = 0; /* return value of function */ /* sanity checks */ if ( !s || !*s || !word || !*word ) return 0; cpEnd = s + strlen(s); /* set a pointer at end of s */ lenWord = strlen(word); while ( NULL != (cp=strstr(cp,word)) ) /* cp points to next occurrence of word (or NULL) */ { ret++; if ( cp + lenWord > cpEnd ) /* true only if word found at end of s */ break; /* delete current occurrence of word (+1 because we need copying '\0' too) */ memmove( cp, cp+lenWord, (size_t)(cpEnd - (cp+lenWord) + 1) ); cpEnd -= lenWord; /* optional (new end of s after deleting word) */ } return ret; } /* ---------------------------------------------- */ int main( void ) { char t[] = "abcd<br>efghi<br><br>jkl<br>mnopqrst<br>."; char *word = "<br>"; int lines = 0; if ( strstr(t, word) ) { char s[sizeof(t)] = {'\0'}; memcpy(s, t, sizeof(t) ); lines = s_del_word(s, word); printf( "%s\n%s was deleted %d times\n%s\n", t, word, lines, s ); } system( "pause" ); /* Windows only */ return 0; } Έξοδος:abcd<br>efghi<br><br>jkl<br>mnopqrst<br>. <br> was deleted 5 times abcdefghijklmnopqrst. Press any key to continue . . . Παρεμπιπτόντως, ο περιορισμός που θέτεις ώστε να γίνεται πρώτα έλεγχος για την ύπαρξη του "<br>" και αν βρεθεί τότε μονάχα να κοπιάρεται το string σε νέα μεταβλητή, περιπλέκει αχρείαστα τον κώδικα της main(), ο οποίος θα μπορούσε να αρκεστεί στον έλεγχο που ενσωματώνει έτσι κι αλλιώς η s_del_word(), αλλά αν είναι έτσι η εκφώνηση το ... καταπίνουμε Μια εναλλακτική υλοποίηση της s_del_word() θα μπορούσε να επιστρέφει το s και να έχει το πλήθος των διαγραφών ως by-reference όρισμα για να το ενημερώνει, ή θα μπορούσε ακόμα να επιστρέφει ένα newly allocated string, το οποίο όμως θα έπρεπε να γίνει free() κατόπιν στην main(). Σε ότι αφορά το άλλο πρόβλημα που παραθέτεις μετέπειτα, το αφήνω σε άλλα παιδιά που έχουν την C++ πολύ πιο φρέσκια από ότι εγώ. ΥΓ. Γιατί έχεις 2 νήματα με το ίδιο ακριβώς θέμα; EDIT: Έβαλα comments. Επεξ/σία 27 Μαρτίου 2013 από migf1
migf1 Δημοσ. 27 Μαρτίου 2013 Δημοσ. 27 Μαρτίου 2013 όχι! και τα δύο μια χαρά γίνονται, το αρχείο το ανοίγει κανονικά, επίσης και τα δύο αρχειάκια είναι στο ίδιο path! Κάπου αλλού σκαλώνει! να καταλάβεις, ανοίγει το δεύτερο αρχείο, δείχνει κανονικά στην οθόνη το περιεχόμενό του και μόλις πάει να κλείσει σκαλώνει και βγάζει το πρόβλημα! Επίσης σε αυτό: να κάνω μία διευκρύνηση, σκαλώνει κάπου μέσα στο if και όχι έξω, σχετικά λογικό αφού ανοίγει το file. Σε μένα πάντως ο κώδικάς σου με g++ 4.7.0 δεν δουλεύει (εκτός αν δεν έχω καταλάβει καλά τι προσπαθείς να κάνεις). Όπως και να 'χει, παρόλο που είμαι σίγουρος πως άλλα παιδιά μπορούν να σου δώσουν πολύ πιο κομψή C++ υλοποίηση από τη δικιά μου, δοκίμασε με τον παρακάτω κώδικα... #include <iostream> #include <fstream> #include <cstdlib> using namespace std; /* ------------------------------------------ */ int main() { ifstream file; // level file to read string fname; // name of the level file string level; // level number string word = "<br>"; int nlines = 0; // prompt for level number cout << "level to open: "; cin >> level; // construct fname and read file, based on user input fname = "level" + level + ".lev"; file.open( fname.c_str() ); // pass fname as c-string to file.open() - back compatibility if ( !file.is_open() ) { cout << "*** error reading file: \"" << fname << "\", aborting to shell..." << endl; system( "pause" ); // Windows only return 0; } // parse the file while ( !file.eof() ) { string fline; // for storing a physical file line getline(file, fline); if ( string::npos == fline.find(word) ) break; string line = fline; // copy fline to a new string // erase all occurrences of word from line size_t pos = 0; while ( string::npos != (pos = line.find(word,pos)) ) { nlines++; line.erase( line.begin() + pos, line.begin() + pos + word.length() ); cout << "line: " << line << endl; } } file.close(); cout << endl << word << " was erased " << nlines << " times" << endl; system( "pause" ); // Windows only return 0; } Sample file: level1.levabcd<br>efghi<br><br>jkl<br>mnopqrst<br>. Έξοδοςlevel to open: 2 *** error reading file: "level2.lev", aborting to shell... Press any key to continue . . . level to open: 1 line: abcdefghi<br><br>jkl<br>mnopqrst<br>. line: abcdefghi<br>jkl<br>mnopqrst<br>. line: abcdefghijkl<br>mnopqrst<br>. line: abcdefghijklmnopqrst<br>. line: abcdefghijklmnopqrst. <br> was erased 5 times Press any key to continue . . . Δεν το γνώριζα, αλλά η ifstream.open() στο C++11 δουλεύει και με string για fname αντί για char array που ήξερα εγώ (στον κώδικα το μετατρέπω από string σε char array, για να δουλεύει και με τα παλαιότερα standards).
ICheats Δημοσ. 28 Μαρτίου 2013 Μέλος Δημοσ. 28 Μαρτίου 2013 (επεξεργασμένο) Ευχαριστώ πολύ!! Θα επεξεργαστώ τη λύση που μου έδωσες! #include <iostream> #include <fstream> #include <cstdlib> using namespace std; /* ------------------------------------------ */ int main() { ifstream file; // level file to read string fname; // name of the level file string level; // level number string word = "<br>"; int nlines = 0; // prompt for level number cout << "level to open: "; cin >> level; // construct fname and read file, based on user input fname = "level" + level + ".lev"; file.open( fname.c_str() ); // pass fname as c-string to file.open() - back compatibility if ( !file.is_open() ) { cout << "*** error reading file: \"" << fname << "\", aborting to shell..." << endl; system( "pause" ); // Windows only return 0; } // parse the file while ( !file.eof() ) { string fline; // for storing a physical file line getline(file, fline); if ( string::npos == fline.find(word) ) break; string line = fline; // copy fline to a new string // erase all occurrences of word from line size_t pos = 0; while ( string::npos != (pos = line.find(word,pos)) ) { nlines++; line.erase( line.begin() + pos, line.begin() + pos + word.length() ); cout << "line: " << line << endl; } } file.close(); cout << endl << word << " was erased " << nlines << " times" << endl; system( "pause" ); // Windows only return 0; } EDIT: Ο κώδικας δουλεύει μια χαρά και με τα δύο αρχεία! Ευχαριστώ πάρα πολύ! :) Επίσης, ξέχασες να κάνεις include <string>!!Επίσης, δεν είναι μεγάλη λεπτομέρεια, αλλά για καλύτερη δομή και κλείσιμο προτείνω αυτό: #include <iostream> #include <fstream> #include <string> using namespace std; /* ------------------------------------------ */ int main() { ifstream file; // level file to read string fname; // name of the level file const string word = "<br>"; string level; // level number int lines = 0; // lines of the array! // prompt for level number cout << "Level to open: "; cin >> level; // construct fname and read file, based on user input fname = "C:\\RPG\\level" + level + ".lev"; file.open( fname ); // pass fname as c-string to file.open() - back compatibility if ( !file.is_open() ) cout << "*** error reading file: \"" << fname << "\"."<< endl; else { // parse the file while ( !file.eof() ) { string fline; // for storing a physical file line getline(file, fline); if ( string::npos == fline.find(word) ) break; string line = fline; // copy fline to a new string // erase all occurrences of word from line size_t pos = 0; while ( string::npos != (pos = line.find(word,pos)) ) { lines++; line.erase ( line.begin() + pos, line.begin() + pos + word.length() ); cout << line << "\t Edited to make <br> disappear!" << endl; } } file.close(); } cout << endl << "Press enter to finish: "; cin.get(); cin.get(); return 0; } ΥΣ: Τον κώδικα τον προσάρμωσα λίγο στο path για να παίζει σε εμένα έτσι όπως το χρειάζομαι! Επεξ/σία 28 Μαρτίου 2013 από ICheats
migf1 Δημοσ. 28 Μαρτίου 2013 Δημοσ. 28 Μαρτίου 2013 Παρακαλώ Όπως σου έγραψα όμως και στο προηγούμενο ποστ μου, η γραμμή 25 του κώδικά σου δεν λειτουργεί σε παλαιότερες αναθεωρήσεις της C++, γιατί η εκεί η ifstream.open() αναμένει c-string και όχι string για fname (συν ότι όπως την έχεις τώρα, το σχόλιό μου δίπλα της που το έχεις αφήσει είναι άσχετο έτσι όπως το έχεις)
migf1 Δημοσ. 29 Μαρτίου 2013 Δημοσ. 29 Μαρτίου 2013 Καλημέρα, ξαναδιαβάζοντας σήμερα τον κώδικά σου είδα επίσης πως η αλλαγή που έκανες σε αντιμετώπιση της περίπτωσης ανοίγματος του αρχείου, επιχειρεί να κλείσει το αρχείο ακόμα κι αν έχει αποτύχει το άνοιγμά του. Δηλαδή η γραμμή 55 πρέπει να μεταφρεθεί στην 53 (να βρίσκεται δηλαδή μέσα στο else). EDIT: άκυρο, μια χαρά μέσα στο else το έχεις, sorry my bad! (αφήνω το υπόλοιπο απλά για να υπάρχει ως πληροφορία). Δεν θυμάμαι όμως αν στην πράξη έχει πρόβλημα με αυτό η C++ ή όχι, και δεν μπορώ να το δοκιμάσω αυτή τη στιγμή (σε C για παράδειγμα, κάποιοι compilers δίνουν seg-fault όταν επιχειρούμε: fclose(NULL) παρόλο που αν το θυμάμαι καλά το πρότυπο από C99 και μετά ορίζει πως θα έπρεπε να κάνουν sanity-check για αυτή την περίπτωση στην υλοποίηση της fclose() ).
ICheats Δημοσ. 29 Μαρτίου 2013 Μέλος Δημοσ. 29 Μαρτίου 2013 Παρακαλώ Όπως σου έγραψα όμως και στο προηγούμενο ποστ μου, η γραμμή 25 του κώδικά σου δεν λειτουργεί σε παλαιότερες αναθεωρήσεις της C++, γιατί η εκεί η ifstream.open() αναμένει c-string και όχι string για fname (συν ότι όπως την έχεις τώρα, το σχόλιό μου δίπλα της που το έχεις αφήσει είναι άσχετο έτσι όπως το έχεις) Ναι, το παρατήρησα και ευχαριστώ, τον έτρεξα τον κώδικα αυτόν με τον gcc και δεν το υποστηρίζει. Τουλάχιστον αυτός που έχω! Η visual c++ πάντως είναι τέλεια! Ναι καλά λες! δεν το παρατήρησα! το αλλάζω τώρα το comment! Καλημέρα, ξαναδιαβάζοντας σήμερα τον κώδικά σου είδα επίσης πως η αλλαγή που έκανες σε αντιμετώπιση της περίπτωσης ανοίγματος του αρχείου, επιχειρεί να κλείσει το αρχείο ακόμα κι αν έχει αποτύχει το άνοιγμά του. Δηλαδή η γραμμή 55 πρέπει να μεταφρεθεί στην 53 (να βρίσκεται δηλαδή μέσα στο else). EDIT: άκυρο, μια χαρά μέσα στο else το έχεις, sorry my bad! (αφήνω το υπόλοιπο απλά για να υπάρχει ως πληροφορία). Δεν θυμάμαι όμως αν στην πράξη έχει πρόβλημα με αυτό η C++ ή όχι, και δεν μπορώ να το δοκιμάσω αυτή τη στιγμή (σε C για παράδειγμα, κάποιοι compilers δίνουν seg-fault όταν επιχειρούμε: fclose(NULL) παρόλο που αν το θυμάμαι καλά το πρότυπο από C99 και μετά ορίζει πως θα έπρεπε να κάνουν sanity-check για αυτή την περίπτωση στην υλοποίηση της fclose() ). οκ! Δεν γνωρίζω για τους compilers της C, πάντως κοιτάζοντας τον κώδικα, είδα μόλις τώρα ότι το file.close() θα έπρεπε να μπει έξω από το else, γιατί νομίζω ότι θα το κλείσει μόνο όταν κάνει ό,τι περιέχει το else, αλλιώς δεν το κλείνει! τι πιστεύεις?
migf1 Δημοσ. 29 Μαρτίου 2013 Δημοσ. 29 Μαρτίου 2013 Μέσα στο else πρέπει να μείνει το file.close(), γιατί μόνο μέσα στο else έχει ανοίξει το file επιτυχημένα (στο if μπαίνει όταν αποτύχει η file.open(), δηλαδή όταν δεν έχει ανοιχτεί το file). Σχετικά με το σχόλιο, είναι καλύτερα να το αφήσεις και να χρησιμοποιήσεις το fname όπως το είχα στον κώδικά μου, δηλαδή fname.c_std() (που σημαίνει πως το περνάει μέσα στην file.open() ως c-string και όχι ως string) για να δουλεύει το πρόγραμμά σου σε όλες τις εκδόσεις της C++. Για τον g++, άμα του βάλεις -std=c++11 θα στο κάνει κανονικά compile και όπως τον έχεις εσύ τον κώδικα.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα