απορία C++ ( για γερούς =?iso-8859-7?b?IOv99OXy?=)

Θοδωρής Λύτρας thlytras at gmail.com
Sun Jan 15 08:14:26 EET 2012


Στις Κυρ 15 Ιαν 2012, ο/η Nikos Platis έγραψε:
> Στις 14 Ιανουαρίου 2012 10:02 μ.μ., ο χρήστης Θοδωρής Λύτρας
> <thlytras at gmail.com> έγραψε:
> > ...ή τουλάχιστον σ'εμένα τον ερασιτέχνη έτσι φαίνεται, καθώς δε μπορώ να
> > βρώ μια απάντηση στο πρόβλημα. Μπαίνω κατευθείαν στο ψητό:
> > 
> > typedef std::vector<A::myEnum> Foo;
> > 
> > class A
> > {
> > public:
> >    enum myEnum {Red, Green, Blue, White, Black};
> >    A();
> >    void myFunction(Foo arg);
> > };
> > 
> > Ο τύπος myEnum θέλω να είναι δηλωμένος μέσα στην κλάση A (όχι global, όχι
> > σε namespace), ενώ ο typedef Foo προτιμώ να είναι global (στη χειρότερη
> > μέσα στην κλάση A). Το πρόβλημα είναι οτι μέσα στην κλάση A έχω τη
> > συνάρτηση myFunction() που δέχεται ως όρισμα ένα αντικείμενο Foo.
> > 
> > Έτσι αν ο typedef Foo οριστεί πριν από την κλάση A ο compiler
> > παραπονείται οτι δεν έχει οριστεί ο myEnum. Αν πάλι ο Foo οριστεί μετά
> > την A, ο compiler παραπονείται οτι δεν έχει οριστεί ο τύπος Foo του
> > ορίσματος της myFunction().
> > 
> > Υπάρχει κάποιος τρόπος να λυθεί το πρόβλημα (με κάποιου είδους forward
> > declaration ίσως??)? Το μόνο που μπορώ να σκεφτώ είναι να μπει το typedef
> > μετά και να μη χρησιμοποιηθεί καθόλου μέσα στην κλάση (δηλαδή να γίνει
> > void myFunction(std::vector<A::myEnum> arg) ) αλλά αυτό είναι άσχημο.
> > 
> > Ή μήπως εγώ είμαι τελείως κακομαθημένος???
> > 
> > Any help appreciated,
> > 
> > Θοδωρής
> > 
> Αφού δεν σε πειράζει το Foo να δηλωθεί μέσα στην κλάση, μπορείς να
> μετακινήσεις το typedef ακριβώς κάτω από τη δήλωση του enum και θα
> δουλέψει.

Αυτό τελικά θα κάνω. Τώρα όμως βγαίνει κι άλλο ένα πρόβλημα. Στην δήλωση της 
myfunction() θέλω να περάσω και ένα κενό std::vector σαν default όρισμα. Δε με 
αφήνει όμως και μου λέει "missing template argument after '('". 

Πως θα πρέπει να δηλώσω ένα κενό std::vector του τύπου myEnum??? Το Foo() δε 
φαίνεται να δουλεύει, ούτε πολύ περισσότερο το std::vector().

Ευχαριστώ,
Θοδωρής

-- 
"Beauty is transitory"
"Beauty survives"
        - Mr. Spock & Capt. Kirk, "That which survives", stardate unknown
by Theodore Lytras <thlytras at gmail.com>



More information about the Linux-greek-users mailing list