Re: απορία C++ ( για γερούς λύτες)
Nikos Platis
nplatis at gmail.com
Sun Jan 15 02:24:24 EET 2012
Αφού δεν σε πειράζει το Foo να δηλωθεί μέσα στην κλάση, μπορείς να
μετακινήσεις το typedef ακριβώς κάτω από τη δήλωση του enum και θα
δουλέψει.
Στις 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,
>
> Θοδωρής
>
>
>
> --
> linux-greek-users mailing list -- http://lists.hellug.gr
More information about the Linux-greek-users
mailing list