m1cRo Δημοσ. 4 Μαΐου 2010 Δημοσ. 4 Μαΐου 2010 Επειδή βαριέμαι να κάνω bug report, μήπως υπάρχει κάποιος καλός άνθρωπος που θα κάνει αυτό για μένα??? Η ίσος το συζητήσουμε περισσότερο. Λοιπόν στο θέμα. >#include <vector> int main(int argc,char** argv){ std::vector<std::vector<int>> vectorInVector; return 0; } Τρέξτε αυτό. Το gcc θα σας πετάξει error που σχετίζεται με τον operator >>. Έλα ντε όμως που δεν υπάρχει τέτοιος operator στο πρόγραμμα μας. Apl το gcc μπερδεύεται και νομίζει ότι το κλείσιμο τον vectors είναι operator >>. Δοκιμάστε στο τέλος να βάλετε ένα κενό ενδιάμεσα και θα γίνει compile κανονικά. Τόσα χρονια και ακόμα έχει τέτοια bugs τελικά και αυτό είναι για τα ....
bnvdarklord Δημοσ. 4 Μαΐου 2010 Δημοσ. 4 Μαΐου 2010 Δεν νομίζω να είναι bug γιατί εμένα μου βγάζει error: ‘>>’ should be ‘> >’ within a nested template argument list
m1cRo Δημοσ. 4 Μαΐου 2010 Μέλος Δημοσ. 4 Μαΐου 2010 Δεν νομίζω να είναι bug γιατί εμένα μου βγάζει E προφανώς είναι αυτό ακριβώς στο οποιο αναφέρομαι. Βάλε τώρα κενό ενδιάμεσα στα >> και θα δεις. ---------- Προσθήκη στις 20:37 ---------- Προηγούμενο μήνυμα στις 20:33 ---------- E προφανώς είναι αυτό ακριβώς στο οποιο αναφέρομαι. Βάλε τώρα κενό ενδιάμεσα στα >> και θα δεις. Ep λάθος μου. Δεν το διάβασα καλά. Αλλα πάλι παραμένει πρόβλημα.
jstark Δημοσ. 4 Μαΐου 2010 Δημοσ. 4 Μαΐου 2010 E προφανώς είναι αυτό ακριβώς στο οποιο αναφέρομαι. Βάλε τώρα κενό ενδιάμεσα στα >> και θα δεις. Δεν είναι bug. Αυτή είναι η προβλεπόμενη συμπεριφορά. Πιθανότατα θα αλλάξει με το νεο standard.
bnvdarklord Δημοσ. 4 Μαΐου 2010 Δημοσ. 4 Μαΐου 2010 Το ξερω το λεει ξεκαθαρα στο error... Βαλτε κενο στο >> εφόσον εχετε εμφωλευμένα templates. edit : ταυτοχρονα post... anywayz
m1cRo Δημοσ. 4 Μαΐου 2010 Μέλος Δημοσ. 4 Μαΐου 2010 A βρήκα κάτι παρόμοι εδώ http://www.cplusplus.com/forum/general/14956/. Τελικά δεν καταλαβαίνω γιατί να έχει τέτοια συμπεριφορά το compiler. Μάλλον έχει πρόβλημα στην συντακτική ανάλυση.
Directx Δημοσ. 4 Μαΐου 2010 Δημοσ. 4 Μαΐου 2010 A βρήκα κάτι παρόμοι εδώ http://www.cplusplus.com/forum/general/14956/.Τελικά δεν καταλαβαίνω γιατί να έχει τέτοια συμπεριφορά το compiler. Μάλλον έχει πρόβλημα στην συντακτική ανάλυση. Είναι γνωστό ζήτημα, κάποιοι compilers το δέχονται, κάποιοι άλλοι παρουσιάζουν ένα warning ότι θα πρέπει να το κάνεις από ">>" σε "> >" ενώ κάποιοι άλλοι το αντιμετοποίζουν ως error απαιτώντας αλλαγή. Γενικά για να είσαι on the safe side να προτιμάς την μορφή "> >". Υ.Γ. Το όλο θέμα προέρχεται από την ομοιότητα του με τον >> operator, λέγεται ότι το σωστό είναι "> >" αλλά καθώς είναι κοινή πρακτική να ορίζεται ως "<>>" μερικοί κατασκευαστές το επιτρέπουν δίχως καν warning πια.
jstark Δημοσ. 4 Μαΐου 2010 Δημοσ. 4 Μαΐου 2010 Είναι γνωστό ζήτημα, κάποιοι compilers το δέχονται, κάποιοι άλλοι παρουσιάζουν ένα warning ότι θα πρέπει να το κάνεις από ">>" σε "> >" ενώ κάποιοι άλλοι το αντιμετοποίζουν ως error απαιτώντας αλλαγή. Γενικά για να είσαι on the safe side να προτιμάς την μορφή "> >". Υ.Γ. Το όλο θέμα προέρχεται από την ομοιότητα του με τον >> operator, λέγεται ότι το σωστό είναι "> >" αλλά καθώς είναι κοινή πρακτική να ορίζεται ως "<>>" μερικοί κατασκευαστές το επιτρέπουν δίχως καν warning πια. Ότι είναι σπαστικό, δε χωράει αμφιβολία, και μάλλον θα διορθωθεί στο νέο standard. Το "σωστό" αυτή τη στιγμή είναι με κενό ανάμεσα στα '>'. Τώρα αν κάποιοι compilers το "αφήνουν", ίσως δεν είναι και πολύ portable λύση. Καλύτερα με κενό, για σιγουριά και portability. Άλλωστε, στην τελική, σιγά το πρόβλημα, μακάρι να ηταν μόνο αυτό ... στην C++.
m1cRo Δημοσ. 4 Μαΐου 2010 Μέλος Δημοσ. 4 Μαΐου 2010 Πραγματικά πρώτη φορα βλέπω να συμπεριφέρεται έτσι κάποιος compiler, για αυτό άλλωστε έκανα και το post. Ίσος είναι επειδή έπιασα για πρώτη φορα τον gcc στα σοβαρά. Η λογική πάντως λέει ότι ο parser πρέπει να καταλαβαίνει το τι γίνετε με τον κώδικα. Μάλλον δεν είναι πρόβλημα τελικά στην συντακτική ανάλυση αλλα στην υποστήριξη της stl από τον gcc.
jstark Δημοσ. 4 Μαΐου 2010 Δημοσ. 4 Μαΐου 2010 Πραγματικά πρώτη φορα βλέπω να συμπεριφέρεται έτσι κάποιος compiler, για αυτό άλλωστε έκανα και το post. Ίσος είναι επειδή έπιασα για πρώτη φορα τον gcc στα σοβαρά. Η λογική πάντως λέει ότι ο parser πρέπει να καταλαβαίνει το τι γίνετε με τον κώδικα. Μάλλον δεν είναι πρόβλημα τελικά στην συντακτική ανάλυση αλλα στην υποστήριξη της stl από τον gcc. Ρε συ φιλαράκι, αφού σου λέω, πως είναι ένα πρόβλημα της ΓΛΩΣΣΑΣ και όχι του εκάστοτε compiler. Γιατί δε με πιστεύεις; Τέλος πάντων, ο δημιουργός της Stroustrup παραδέχτηκε οτι δεν είναι καλό πράγμα αυτό, και πιθανότατα θα αντιμετωπιστεί (αν δεν αντιμετωπίστηκε ήδη) στο C++0x. Δεν είναι πρόβλημα του gcc. Ίσα ίσα, σε αυτην την περίπτωση κάνει ότι λέει το standard. Αν θες να βρεις προβλήματα σε gcc, κάνε compile με -O3. Θα βρεις αρκετά.
m1cRo Δημοσ. 4 Μαΐου 2010 Μέλος Δημοσ. 4 Μαΐου 2010 Ρε συ φιλαράκι, αφού σου λέω, πως είναι ένα πρόβλημα της ΓΛΩΣΣΑΣ και όχι του εκάστοτε compiler. Γιατί δε με πιστεύεις; Τέλος πάντων, ο δημιουργός της Stroustrup παραδέχτηκε οτι δεν είναι καλό πράγμα αυτό, και πιθανότατα θα αντιμετωπιστεί (αν δεν αντιμετωπίστηκε ήδη) στο C++0x. Δεν είναι πρόβλημα του gcc. Ίσα ίσα, σε αυτην την περίπτωση κάνει ότι λέει το standard. Αν θες να βρεις προβλήματα σε gcc, κάνε compile με -O3. Θα βρεις αρκετά. Γιατί που βλέπεις το πρόβλημα στην συγκεκριμένη έκφραση δηλαδή?? Εσύ δεν καταλαβαίνεις ότι <vector<vector<string>> >> στο τέλος δεν είναι operator??? Προφανώς και καταλαβαίνεις, από την στιγμή που το καταλαβαίνεις εσύ και καταλαβαίνουν και υπόλοιποι + άλλοι compilers πάλι υποστηρίζεις ότι είναι πρόβλημα της γλώσσας??? Και μάλιστα αυτό αφορά την stl και όχι την c++ ως γλώσσα. Δηλαδή αν πούμε ότι κάποιος parser για XML δεν μπορεί να κάνει parse γιατί τα < είναι κολλητά μεταξύ τους θα πούμε ότι έχει πρόβλημα η xml??
jstark Δημοσ. 4 Μαΐου 2010 Δημοσ. 4 Μαΐου 2010 Γιατί που βλέπεις το πρόβλημα στην συγκεκριμένη έκφραση δηλαδή?? Εσύ δεν καταλαβαίνεις ότι <vector<vector<string>> >> στο τέλος δεν είναι operator??? Προφανώς και καταλαβαίνεις, από την στιγμή που το καταλαβαίνεις εσύ και καταλαβαίνουν και υπόλοιποι + άλλοι compilers πάλι υποστηρίζεις ότι είναι πρόβλημα της γλώσσας??? Και μάλιστα αυτό αφορά την stl και όχι την c++ ως γλώσσα. Δηλαδή αν πούμε ότι κάποιος parser για XML δεν μπορεί να κάνει parse γιατί τα < είναι κολλητά μεταξύ τους θα πούμε ότι έχει πρόβλημα η xml?? Ρε συ φίλε, εγώ το καταλαβαίνω, αλλά έτσι όπως είναι οι κανόνες της γλώσσας, ο compiler θα εξάγει το συμπέρασμα πως πρόκειται για τον operator >>. Αυτό λέω αλλά δε μ'ακούς. Είναι πρόβλημα του standard, και (οπως εχω γραψει 2-3 φορες) θα λυθεί, αν δεν λύθηκε (sto νέο standard) και όταν βγουν οι νεοι compilers που θα το υποστηριζουν τοτε δε θα υπαρχει προβλημα. Συμφωνα με το ΠΑΛΙΟ standard, ο compiler θα θεωρήσει πως προκειται για τον operator >>. Σε παραπέμπω στα βιβλία "The C++ Programming Language" και "C++ Templates" για περισσότερες πληροφοριες. Εννοείται πως το προβλημα μπορεί να λυθεί σε επιπεδο compiler, αλλά μετά δε θα είσαι σιγουρος για το portability του κωδικα. Και μία ερώτηση: σε ποιον compiler ΔΕΝ είχες προβλημα χωρις κενό ανάμεσα ? VC++ ?
bxenos Δημοσ. 4 Μαΐου 2010 Δημοσ. 4 Μαΐου 2010 μια μικρή διόρθωση: Η "ερμηνία" των συμβόλων γίνεται απο τον preprocessor, όχι απο τον compiler. Πιθανά προβλήματα ασυμβατότητας (π.χ. με τα /*/ ) είχαν αναφερθεί και απο τους K&R και πρότειναν να μην τσιγκουνευόμαστε τα ' ' (κενά).
m1cRo Δημοσ. 4 Μαΐου 2010 Μέλος Δημοσ. 4 Μαΐου 2010 Δεν σε πιστεύω για τον απλούστατο λόγο. Θεωρώ ότι το έχεις διαβάσει απλά κάπου και το έχεις ως δεδομένο. Δεν βλέπω καμια λογική εξήγηση για το γιατί να καταλαβαίνει ο συγκεκριμένος compiler, τονίζω συγκεκριμένος, γιατί έχω δουλέψει και τους άλλους χωρίς να μου βγάζουν tpt, ότι το >> είναι operator σαούτιν την περίπτωση, πιστεύω ότι υπάρχει λογικό λάθος στην ανάλυση του κώδικα και απλά το κρύβουν λέγοντας ότι επειδή στην c++ το >> δεν μπορούμε να κάνουμε κάτι. Θα το παραδεχόμουν αν μου έλεγες ότι ο gcc είναι γραμμένος έτσι που αυτήν την στιγμή δεν είναι δυνατόν να τον διορθώσουν ok. Αλλα να μου λες ότι δεν καταλαβαίνει τα προφανείς ενώ οι υπόλοιποι compilers το πιάνουν μια χαρά είναι λίγο κάπως. Απλά θέλω τεκμηριωμένες απόψεις.
jstark Δημοσ. 4 Μαΐου 2010 Δημοσ. 4 Μαΐου 2010 Δεν σε πιστεύω για τον απλούστατο λόγο. Θεωρώ ότι το έχεις διαβάσει απλά κάπου και το έχεις ως δεδομένο. Δεν βλέπω καμια λογική εξήγηση για το γιατί να καταλαβαίνει ο συγκεκριμένος compiler, τονίζω συγκεκριμένος, γιατί έχω δουλέψει και τους άλλους χωρίς να μου βγάζουν tpt, ότι το >> είναι operator σαούτιν την περίπτωση, πιστεύω ότι υπάρχει λογικό λάθος στην ανάλυση του κώδικα και απλά το κρύβουν λέγοντας ότι επειδή στην c++ το >> δεν μπορούμε να κάνουμε κάτι. Θα το παραδεχόμουν αν μου έλεγες ότι ο gcc είναι γραμμένος έτσι που αυτήν την στιγμή δεν είναι δυνατόν να τον διορθώσουν ok. Αλλα να μου λες ότι δεν καταλαβαίνει τα προφανείς ενώ οι υπόλοιποι compilers το πιάνουν μια χαρά είναι λίγο κάπως. Απλά θέλω τεκμηριωμένες απόψεις. Δεν χρειάζεται να με πιστέψεις, απλά διάβασε το standard (το current) ή κάποιο βιβλίο reference οπως του Stroustrup ή του Stepanov για τα templates. Οι υπόλοιποι compilers το υποστηρίζουν προφανως μέσω extension. Το current standard το θεωρεί illegal. Ναι το έχω διαβάσει κάπου, στα βιβλία που σου ανέφερα. Και ναι το θεωρώ δεδομένο. Αλλά όπως είπα, θα λυθεί στο C++0x. Είμαι σίγουρος πως και o gcc με κάποιο extension δε θα έχει πρόβλημα.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.