Thread overview | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
June 30, 2004 enum in D vs C++ | ||||
---|---|---|---|---|
| ||||
I'm porting some code from C++ to D for comparison, and I've hit some head-scratching with enums. Specifically, scope... although I have appropriately changed the enum definition syntax to match D, I am getting errors about undefined identifiers when I try to compile. I have searched the online material and the newsgroups, and found nothing to get me past this... here is part of the code: struct a { enum b { c, d }; }; that's a simplified segment. The problem is that later on in the C++ code, I use c and d, but apparently they are out of scope. I've tried things like b.c etc. and a.b.c (without actually knowing *why* - sometimes I hit on the right thing by luck and work the reason out after!) but it still fails to work. The C++ code compiles and runs perfectly, by the way. Is there anything I should know about enums that is not mentioned on the D site, and that is relevant to this? |
June 30, 2004 Re: enum in D vs C++ | ||||
---|---|---|---|---|
| ||||
Posted in reply to Dan Williams | "Dan Williams" <dnews@ithium.NOSPAM.net> wrote in message news:cbus74$p04$1@digitaldaemon.com... > I'm porting some code from C++ to D for comparison, and I've hit some head-scratching with enums. Specifically, scope... although I have appropriately changed the enum definition syntax to match D, I am getting errors about undefined identifiers when I try to compile. I have searched the online material and the newsgroups, and found nothing to get me past this... here is part of the code: > > struct a { > enum b { > c, d > }; > }; > > that's a simplified segment. The problem is that later on in the C++ code, I > use c and d, but apparently they are out of scope. I've tried things like b.c etc. and a.b.c (without actually knowing *why* - sometimes I hit on the > right thing by luck and work the reason out after!) but it still fails to work. > > The C++ code compiles and runs perfectly, by the way. > > Is there anything I should know about enums that is not mentioned on the D site, and that is relevant to this? Enums with a tag name are scoped by that tag, so you'd reference the c,d as a.b.c and a.b.d. Enums without a tag name are in the enclosing scope, so it would be a.c and a.d. |
June 30, 2004 Re: enum in D vs C++ | ||||
---|---|---|---|---|
| ||||
Posted in reply to Dan Williams | works for me: struct a { enum b { c, d } static void foo() { printf("%d\n",b.d); } } int main() { printf("%d\n", a.b.d); a.foo(); return 0; } I guess more details about your code would be needed to figure out what is going wrong for you. "Dan Williams" <dnews@ithium.NOSPAM.net> wrote in message news:cbus74$p04$1@digitaldaemon.com... > I'm porting some code from C++ to D for comparison, and I've hit some head-scratching with enums. Specifically, scope... although I have appropriately changed the enum definition syntax to match D, I am getting errors about undefined identifiers when I try to compile. I have searched the online material and the newsgroups, and found nothing to get me past this... here is part of the code: > > struct a { > enum b { > c, d > }; > }; > > that's a simplified segment. The problem is that later on in the C++ code, I > use c and d, but apparently they are out of scope. I've tried things like b.c etc. and a.b.c (without actually knowing *why* - sometimes I hit on the > right thing by luck and work the reason out after!) but it still fails to work. > > The C++ code compiles and runs perfectly, by the way. > > Is there anything I should know about enums that is not mentioned on the D site, and that is relevant to this? > > > |
June 30, 2004 Re: enum in D vs C++ | ||||
---|---|---|---|---|
| ||||
Posted in reply to Walter | "Walter" <newshound@digitalmars.com> wrote in message news:cbutnq$r4s$1@digitaldaemon.com... > > "Dan Williams" <dnews@ithium.NOSPAM.net> wrote in message news:cbus74$p04$1@digitaldaemon.com... > > I'm porting some code from C++ to D for comparison, and I've hit some head-scratching with enums. Specifically, scope... although I have appropriately changed the enum definition syntax to match D, I am getting > > errors about undefined identifiers when I try to compile. I have searched > > the online material and the newsgroups, and found nothing to get me past this... here is part of the code: > > > > struct a { > > enum b { > > c, d > > }; > > }; > > > > that's a simplified segment. The problem is that later on in the C++ code, > I > > use c and d, but apparently they are out of scope. I've tried things like > > b.c etc. and a.b.c (without actually knowing *why* - sometimes I hit on > the > > right thing by luck and work the reason out after!) but it still fails to > > work. > > > > The C++ code compiles and runs perfectly, by the way. > > > > Is there anything I should know about enums that is not mentioned on the D > > site, and that is relevant to this? > > Enums with a tag name are scoped by that tag, so you'd reference the c,d as > a.b.c and a.b.d. Enums without a tag name are in the enclosing scope, so it > would be a.c and a.d. > > Thanks... I think. I'm still having problems. There's a union in the 'a' struct, and the members are addressed in the way that you say - but then, they were anyway. As for the enum... I end up with this code: struct a { enum b { c, d }; }; typedef a var; ... var e; e.b = e.b.c; ... In C++, the code was 'e.b = c' but that gets an error of 'undefined identifier c'. The problem is, the new code not only just looks *wrong*, and *feels* wrong, but it generates another error: 'e.b is not an lvalue', whatever that means. |
June 30, 2004 Re: enum in D vs C++ | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ben Hinkle | Hmmm... indeed your code does work fine. I'm gonna go back to the drawing board with this one; if I don't manage to fix it then I'll probably have to post more code. "Ben Hinkle" <bhinkle@mathworks.com> wrote in message news:cbuttk$rau$1@digitaldaemon.com... > works for me: > > struct a { > enum b { > c, d > } > static void foo() { printf("%d\n",b.d); } > } > > int main() { > printf("%d\n", a.b.d); > a.foo(); > return 0; > } > > I guess more details about your code would be needed to figure out what is going wrong for you. > > "Dan Williams" <dnews@ithium.NOSPAM.net> wrote in message news:cbus74$p04$1@digitaldaemon.com... > > I'm porting some code from C++ to D for comparison, and I've hit some head-scratching with enums. Specifically, scope... although I have appropriately changed the enum definition syntax to match D, I am getting > > errors about undefined identifiers when I try to compile. I have searched > > the online material and the newsgroups, and found nothing to get me past this... here is part of the code: > > > > struct a { > > enum b { > > c, d > > }; > > }; > > > > that's a simplified segment. The problem is that later on in the C++ code, > I > > use c and d, but apparently they are out of scope. I've tried things like > > b.c etc. and a.b.c (without actually knowing *why* - sometimes I hit on > the > > right thing by luck and work the reason out after!) but it still fails to > > work. > > > > The C++ code compiles and runs perfectly, by the way. > > > > Is there anything I should know about enums that is not mentioned on the D > > site, and that is relevant to this? > > > > > > > > |
June 30, 2004 Re: enum in D vs C++ | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ben Hinkle | Ok, I am now quite confused, which is not good, because surely there is not much about enums that I should be getting confused about! They are, after all, just a simple data type. I expanded your code to make it more like mine until I encountered the error again. This is the code: struct a { enum b { c, d } } typedef a Z; int main() { Z e; e.b = e.b.d; printf("%d\n", e.b); return 0; } ...it fails with that error that I mentioned in a previous message: "e.b. is not an lvalue". Which is weird, because I assume lvalue simply means an assignable entity, and it certainly should be assignable? In the sense that I should be able to assign a value to it? Maybe that message means something else. Anyway, before posting I decided to make the code a bit more meaningful by giving different variable names. This is the altered code: struct vehicle { enum body { saloon, suv } } typedef vehicle car; int main() { car myCar; myCar.body = myCar.body.suv; printf("%d\n", myCar.body); return 0; } Now, I am pretty sure that every entity there is semantically the same, just changed in name from 'a' to 'vehicle' for instance. But bizarrely, I get these errors: line 6: { enum members } expected line 6: Declaration expected, not 'body' line 13: identifier expected following '.', not 'body' line 13: identifier expected following '.', not 'body' line 14: identifier expected following '.', not 'body' line 17: struct member expected Gah! Very weird! Just so that you can compare, I ported the above car example BACK to C++. And guess what - it compiled and ran fine. Here it is: struct vehicle { enum { saloon, suv } body; }; typedef struct vehicle car; int main() { car myCar; myCar.body = suv; printf("%d\n", myCar.body); return 0; } Hopefully that will give you enough to go on to work out what on earth the problem is... "Ben Hinkle" <bhinkle@mathworks.com> wrote in message news:cbuttk$rau$1@digitaldaemon.com... > works for me: > > struct a { > enum b { > c, d > } > static void foo() { printf("%d\n",b.d); } > } > > int main() { > printf("%d\n", a.b.d); > a.foo(); > return 0; > } > > I guess more details about your code would be needed to figure out what is going wrong for you. > > "Dan Williams" <dnews@ithium.NOSPAM.net> wrote in message news:cbus74$p04$1@digitaldaemon.com... > > I'm porting some code from C++ to D for comparison, and I've hit some head-scratching with enums. Specifically, scope... although I have appropriately changed the enum definition syntax to match D, I am getting > > errors about undefined identifiers when I try to compile. I have searched > > the online material and the newsgroups, and found nothing to get me past this... here is part of the code: > > > > struct a { > > enum b { > > c, d > > }; > > }; > > > > that's a simplified segment. The problem is that later on in the C++ code, > I > > use c and d, but apparently they are out of scope. I've tried things like > > b.c etc. and a.b.c (without actually knowing *why* - sometimes I hit on > the > > right thing by luck and work the reason out after!) but it still fails to > > work. > > > > The C++ code compiles and runs perfectly, by the way. > > > > Is there anything I should know about enums that is not mentioned on the D > > site, and that is relevant to this? > > > > > > > > |
June 30, 2004 Re: enum in D vs C++ | ||||
---|---|---|---|---|
| ||||
Posted in reply to Dan Williams | "Dan Williams" <dnews@ithium.NOSPAM.net> wrote in message news:cbv2l4$1277$1@digitaldaemon.com... > Ok, I am now quite confused, which is not good, because surely there is not > much about enums that I should be getting confused about! They are, after all, just a simple data type. > > I expanded your code to make it more like mine until I encountered the error > again. This is the code: > > struct a { > enum b { > c, d > } > } > typedef a Z; > int main() { > Z e; > e.b = e.b.d; > printf("%d\n", e.b); > return 0; > } > > ...it fails with that error that I mentioned in a previous message: "e.b. is > not an lvalue". Which is weird, because I assume lvalue simply means an assignable entity, and it certainly should be assignable? In the sense that > I should be able to assign a value to it? Maybe that message means something > else. e.b is not an lvalue. "b" is a type name not a field name. Try something like struct vehicle { enum body_t { saloon, suv } body_t body; } > > Anyway, before posting I decided to make the code a bit more meaningful by giving different variable names. This is the altered code: > > struct vehicle { > enum body { > saloon, suv > } > } > typedef vehicle car; > int main() { > car myCar; > myCar.body = myCar.body.suv; > printf("%d\n", myCar.body); > return 0; > } > > Now, I am pretty sure that every entity there is semantically the same, just > changed in name from 'a' to 'vehicle' for instance. But bizarrely, I get these errors: > > line 6: { enum members } expected > line 6: Declaration expected, not 'body' > line 13: identifier expected following '.', not 'body' > line 13: identifier expected following '.', not 'body' > line 14: identifier expected following '.', not 'body' > line 17: struct member expected > > Gah! Very weird! > > Just so that you can compare, I ported the above car example BACK to C++. And guess what - it compiled and ran fine. Here it is: > > struct vehicle { > enum { > saloon, suv > } body; > }; > typedef struct vehicle car; > int main() { > car myCar; > myCar.body = suv; > printf("%d\n", myCar.body); > return 0; > } > > Hopefully that will give you enough to go on to work out what on earth the problem is... > > > > "Ben Hinkle" <bhinkle@mathworks.com> wrote in message news:cbuttk$rau$1@digitaldaemon.com... > > works for me: > > > > struct a { > > enum b { > > c, d > > } > > static void foo() { printf("%d\n",b.d); } > > } > > > > int main() { > > printf("%d\n", a.b.d); > > a.foo(); > > return 0; > > } > > > > I guess more details about your code would be needed to figure out what is > > going wrong for you. > > > > "Dan Williams" <dnews@ithium.NOSPAM.net> wrote in message news:cbus74$p04$1@digitaldaemon.com... > > > I'm porting some code from C++ to D for comparison, and I've hit some head-scratching with enums. Specifically, scope... although I have appropriately changed the enum definition syntax to match D, I am > getting > > > errors about undefined identifiers when I try to compile. I have > searched > > > the online material and the newsgroups, and found nothing to get me past > > > this... here is part of the code: > > > > > > struct a { > > > enum b { > > > c, d > > > }; > > > }; > > > > > > that's a simplified segment. The problem is that later on in the C++ > code, > > I > > > use c and d, but apparently they are out of scope. I've tried things > like > > > b.c etc. and a.b.c (without actually knowing *why* - sometimes I hit on > > the > > > right thing by luck and work the reason out after!) but it still fails > to > > > work. > > > > > > The C++ code compiles and runs perfectly, by the way. > > > > > > Is there anything I should know about enums that is not mentioned on the > D > > > site, and that is relevant to this? > > > > > > > > > > > > > > > |
June 30, 2004 Re: enum in D vs C++ | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ben Hinkle | w00t! Thankyou for that... I made the change you suggested, and it worked :) Looking at the enum docs, I don't think this is really made very clear. The only mention of this is right at the bottom of the page, and it doesn't stand out as something I had to do. Well, I was then able to find that despite the first example then working, the second did not. I changed 'body' to 'shape' and it ran just fine. Unfortunate choice of word, then... I figured body was a keyword and managed to locate a list at http://www.digitalmars.com/d/lex.html Well, thankyou, stupid problem that, but I'm glad to have it solved :) "Ben Hinkle" <bhinkle@mathworks.com> wrote in message news:cbv3d4$13eb$1@digitaldaemon.com... > > "Dan Williams" <dnews@ithium.NOSPAM.net> wrote in message news:cbv2l4$1277$1@digitaldaemon.com... > > Ok, I am now quite confused, which is not good, because surely there is > not > > much about enums that I should be getting confused about! They are, after > > all, just a simple data type. > > > > I expanded your code to make it more like mine until I encountered the > error > > again. This is the code: > > > > struct a { > > enum b { > > c, d > > } > > } > > typedef a Z; > > int main() { > > Z e; > > e.b = e.b.d; > > printf("%d\n", e.b); > > return 0; > > } > > > > ...it fails with that error that I mentioned in a previous message: "e.b. > is > > not an lvalue". Which is weird, because I assume lvalue simply means an assignable entity, and it certainly should be assignable? In the sense > that > > I should be able to assign a value to it? Maybe that message means > something > > else. > > e.b is not an lvalue. "b" is a type name not a field name. Try something like > > struct vehicle { > enum body_t { > saloon, suv > } > body_t body; > } > > > > > Anyway, before posting I decided to make the code a bit more meaningful by > > giving different variable names. This is the altered code: > > > > struct vehicle { > > enum body { > > saloon, suv > > } > > } > > typedef vehicle car; > > int main() { > > car myCar; > > myCar.body = myCar.body.suv; > > printf("%d\n", myCar.body); > > return 0; > > } > > > > Now, I am pretty sure that every entity there is semantically the same, > just > > changed in name from 'a' to 'vehicle' for instance. But bizarrely, I get these errors: > > > > line 6: { enum members } expected > > line 6: Declaration expected, not 'body' > > line 13: identifier expected following '.', not 'body' > > line 13: identifier expected following '.', not 'body' > > line 14: identifier expected following '.', not 'body' > > line 17: struct member expected > > > > Gah! Very weird! > > > > Just so that you can compare, I ported the above car example BACK to C++. > > And guess what - it compiled and ran fine. Here it is: > > > > struct vehicle { > > enum { > > saloon, suv > > } body; > > }; > > typedef struct vehicle car; > > int main() { > > car myCar; > > myCar.body = suv; > > printf("%d\n", myCar.body); > > return 0; > > } > > > > Hopefully that will give you enough to go on to work out what on earth the > > problem is... > > > > > > > > "Ben Hinkle" <bhinkle@mathworks.com> wrote in message news:cbuttk$rau$1@digitaldaemon.com... > > > works for me: > > > > > > struct a { > > > enum b { > > > c, d > > > } > > > static void foo() { printf("%d\n",b.d); } > > > } > > > > > > int main() { > > > printf("%d\n", a.b.d); > > > a.foo(); > > > return 0; > > > } > > > > > > I guess more details about your code would be needed to figure out what > is > > > going wrong for you. > > > > > > "Dan Williams" <dnews@ithium.NOSPAM.net> wrote in message news:cbus74$p04$1@digitaldaemon.com... > > > > I'm porting some code from C++ to D for comparison, and I've hit some > > > > head-scratching with enums. Specifically, scope... although I have appropriately changed the enum definition syntax to match D, I am > > getting > > > > errors about undefined identifiers when I try to compile. I have > > searched > > > > the online material and the newsgroups, and found nothing to get me > past > > > > this... here is part of the code: > > > > > > > > struct a { > > > > enum b { > > > > c, d > > > > }; > > > > }; > > > > > > > > that's a simplified segment. The problem is that later on in the C++ > > code, > > > I > > > > use c and d, but apparently they are out of scope. I've tried things > > like > > > > b.c etc. and a.b.c (without actually knowing *why* - sometimes I hit > on > > > the > > > > right thing by luck and work the reason out after!) but it still fails > > to > > > > work. > > > > > > > > The C++ code compiles and runs perfectly, by the way. > > > > > > > > Is there anything I should know about enums that is not mentioned on > the > > D > > > > site, and that is relevant to this? > > > > > > > > > > > > > > > > > > > > > > > > |
June 30, 2004 Re: enum in D vs C++ | ||||
---|---|---|---|---|
| ||||
Posted in reply to Dan Williams | "Dan Williams" <dnews@ithium.NOSPAM.net> wrote in message news:cbuugk$s37$1@digitaldaemon.com... > "Walter" <newshound@digitalmars.com> wrote in message news:cbutnq$r4s$1@digitaldaemon.com... > > > > "Dan Williams" <dnews@ithium.NOSPAM.net> wrote in message news:cbus74$p04$1@digitaldaemon.com... > > > I'm porting some code from C++ to D for comparison, and I've hit some head-scratching with enums. Specifically, scope... although I have appropriately changed the enum definition syntax to match D, I am > getting > > > errors about undefined identifiers when I try to compile. I have > searched > > > the online material and the newsgroups, and found nothing to get me past > > > this... here is part of the code: > > > > > > struct a { > > > enum b { > > > c, d > > > }; > > > }; > > > > > > that's a simplified segment. The problem is that later on in the C++ > code, > > I > > > use c and d, but apparently they are out of scope. I've tried things > like > > > b.c etc. and a.b.c (without actually knowing *why* - sometimes I hit on > > the > > > right thing by luck and work the reason out after!) but it still fails > to > > > work. > > > > > > The C++ code compiles and runs perfectly, by the way. > > > > > > Is there anything I should know about enums that is not mentioned on the > D > > > site, and that is relevant to this? > > > > Enums with a tag name are scoped by that tag, so you'd reference the c,d > as > > a.b.c and a.b.d. Enums without a tag name are in the enclosing scope, so > it > > would be a.c and a.d. > > > > > > Thanks... I think. > > I'm still having problems. There's a union in the 'a' struct, and the members are addressed in the way that you say - but then, they were anyway. > As for the enum... I end up with this code: > > struct a { > enum b { > c, d > }; > }; > > typedef a var; > > ... > > var e; > e.b = e.b.c; > > ... > > In C++, the code was 'e.b = c' but that gets an error of 'undefined identifier c'. The problem is, the new code not only just looks *wrong*, and > *feels* wrong, but it generates another error: 'e.b is not an lvalue', whatever that means. The code *is* wrong. b is the name of the enum, it is not a member variable. Not an lvalue means it isn't a memory location that can be assigned to. |
June 30, 2004 Re: enum in D vs C++ | ||||
---|---|---|---|---|
| ||||
Posted in reply to Dan Williams | On Wed, 30 Jun 2004 20:31:00 +0100, Dan Williams <dnews@ithium.NOSPAM.net> wrote: > w00t! Thankyou for that... I made the change you suggested, and it worked :) > > Looking at the enum docs, I don't think this is really made very clear. The > only mention of this is right at the bottom of the page, and it doesn't > stand out as something I had to do. > > Well, I was then able to find that despite the first example then working, > the second did not. I changed 'body' to 'shape' and it ran just fine. > Unfortunate choice of word, then... I figured body was a keyword and managed > to locate a list at http://www.digitalmars.com/d/lex.html > > Well, thankyou, stupid problem that, but I'm glad to have it solved :) FYI.. I think the reason this had you confused is that your C code.. struct vehicle { enum { saloon, suv } body; }; does not mean what you think it means. The above defines an *unnamed* enum AND declares an instance of it in the struct. The D Ben posted... struct vehicle { enum body_t { //defines an enum called 'body_t' saloon, suv } body_t body; //creates an instance of it. } is a complete/correct translation of the C, whereas your translation... struct a { enum b { //defines an enum called 'b' c, d } } does not create an instance of the defined enum in your struct, which is not possible in D IIRC. The D documentation should probably outline this fact. Regan. > "Ben Hinkle" <bhinkle@mathworks.com> wrote in message > news:cbv3d4$13eb$1@digitaldaemon.com... >> >> "Dan Williams" <dnews@ithium.NOSPAM.net> wrote in message >> news:cbv2l4$1277$1@digitaldaemon.com... >> > Ok, I am now quite confused, which is not good, because surely there >> is >> not >> > much about enums that I should be getting confused about! They are, > after >> > all, just a simple data type. >> > >> > I expanded your code to make it more like mine until I encountered the >> error >> > again. This is the code: >> > >> > struct a { >> > enum b { >> > c, d >> > } >> > } >> > typedef a Z; >> > int main() { >> > Z e; >> > e.b = e.b.d; >> > printf("%d\n", e.b); >> > return 0; >> > } >> > >> > ...it fails with that error that I mentioned in a previous message: > "e.b. >> is >> > not an lvalue". Which is weird, because I assume lvalue simply means >> an >> > assignable entity, and it certainly should be assignable? In the sense >> that >> > I should be able to assign a value to it? Maybe that message means >> something >> > else. >> >> e.b is not an lvalue. "b" is a type name not a field name. Try something >> like >> >> struct vehicle { >> enum body_t { >> saloon, suv >> } >> body_t body; >> } >> >> > >> > Anyway, before posting I decided to make the code a bit more >> meaningful > by >> > giving different variable names. This is the altered code: >> > >> > struct vehicle { >> > enum body { >> > saloon, suv >> > } >> > } >> > typedef vehicle car; >> > int main() { >> > car myCar; >> > myCar.body = myCar.body.suv; >> > printf("%d\n", myCar.body); >> > return 0; >> > } >> > >> > Now, I am pretty sure that every entity there is semantically the >> same, >> just >> > changed in name from 'a' to 'vehicle' for instance. But bizarrely, I >> get >> > these errors: >> > >> > line 6: { enum members } expected >> > line 6: Declaration expected, not 'body' >> > line 13: identifier expected following '.', not 'body' >> > line 13: identifier expected following '.', not 'body' >> > line 14: identifier expected following '.', not 'body' >> > line 17: struct member expected >> > >> > Gah! Very weird! >> > >> > Just so that you can compare, I ported the above car example BACK to > C++. >> > And guess what - it compiled and ran fine. Here it is: >> > >> > struct vehicle { >> > enum { >> > saloon, suv >> > } body; >> > }; >> > typedef struct vehicle car; >> > int main() { >> > car myCar; >> > myCar.body = suv; >> > printf("%d\n", myCar.body); >> > return 0; >> > } >> > >> > Hopefully that will give you enough to go on to work out what on earth > the >> > problem is... >> > >> > >> > >> > "Ben Hinkle" <bhinkle@mathworks.com> wrote in message >> > news:cbuttk$rau$1@digitaldaemon.com... >> > > works for me: >> > > >> > > struct a { >> > > enum b { >> > > c, d >> > > } >> > > static void foo() { printf("%d\n",b.d); } >> > > } >> > > >> > > int main() { >> > > printf("%d\n", a.b.d); >> > > a.foo(); >> > > return 0; >> > > } >> > > >> > > I guess more details about your code would be needed to figure out > what >> is >> > > going wrong for you. >> > > >> > > "Dan Williams" <dnews@ithium.NOSPAM.net> wrote in message >> > > news:cbus74$p04$1@digitaldaemon.com... >> > > > I'm porting some code from C++ to D for comparison, and I've hit > some >> > > > head-scratching with enums. Specifically, scope... although I have >> > > > appropriately changed the enum definition syntax to match D, I am >> > getting >> > > > errors about undefined identifiers when I try to compile. I have >> > searched >> > > > the online material and the newsgroups, and found nothing to get >> me >> past >> > > > this... here is part of the code: >> > > > >> > > > struct a { >> > > > enum b { >> > > > c, d >> > > > }; >> > > > }; >> > > > >> > > > that's a simplified segment. The problem is that later on in the >> C++ >> > code, >> > > I >> > > > use c and d, but apparently they are out of scope. I've tried >> things >> > like >> > > > b.c etc. and a.b.c (without actually knowing *why* - sometimes I >> hit >> on >> > > the >> > > > right thing by luck and work the reason out after!) but it still > fails >> > to >> > > > work. >> > > > >> > > > The C++ code compiles and runs perfectly, by the way. >> > > > >> > > > Is there anything I should know about enums that is not mentioned >> on >> the >> > D >> > > > site, and that is relevant to this? >> > > > >> > > > >> > > > >> > > >> > > >> > >> > >> >> > > -- Using M2, Opera's revolutionary e-mail client: http://www.opera.com/m2/ |
Copyright © 1999-2021 by the D Language Foundation