| Thread overview | ||||||
|---|---|---|---|---|---|---|
|
July 11, 2005 possible d error? | ||||
|---|---|---|---|---|
| ||||
enum doesn't seem to be working as defined in the documentation...unless I'm missing something pretty basic.
The code is:
enum TokenTyp {tPre, tPost, tConj};
TokenTyp[char[]] tokenTyp;
void test()
{ tokenTyp["if"] = tPre;
tokenTyp["then"] = 3;
tokenTyp["not"] = tPre;
tokenTyp["or"] = 2;
tokenTyp["else"] = 2;
tokenTyp["and"] = 2;
}
The result is:
la1:~/projects/d/AIA/src2$ dmd -c errexample.d
errexample.d(4): undefined identifier tPre
errexample.d(4): cannot implicitly convert expression (tPre) of type int to TokenTyp
errexample.d(6): undefined identifier tPre
errexample.d(6): cannot implicitly convert expression (tPre) of type int to TokenTyp
Relevant examples from thedocumentation are:
enum X { A, B, C } // named enum
enum { A, B = 5+7, C, D = 8, E }
and
enum X { A=3, B, C }
I tried moving the enum statement to within the body of the function, in case it was a name scoping problem, but the error message didn't change.
| ||||
July 11, 2005 Re: possible d error? | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Charles Hixson | Try what I have below: On Mon, 11 Jul 2005 14:22:13 -0700, Charles Hixson <charleshixsn@earthlink.net> wrote: > enum doesn't seem to be working as defined in the documentation...unless I'm missing something pretty basic. > The code is: > enum TokenTyp {tPre, tPost, tConj}; > TokenTyp[char[]] tokenTyp; > void test() > { tokenTyp["if"] = tPre; tokenTyp["if"] = TokenTyp.tPre; > tokenTyp["then"] = 3; > tokenTyp["not"] = tPre; tokenTyp["not"] = TokenTyp.tPre; > tokenTyp["or"] = 2; > tokenTyp["else"] = 2; > tokenTyp["and"] = 2; > } Regan > The result is: > la1:~/projects/d/AIA/src2$ dmd -c errexample.d > errexample.d(4): undefined identifier tPre > errexample.d(4): cannot implicitly convert expression (tPre) of type int to TokenTyp > errexample.d(6): undefined identifier tPre > errexample.d(6): cannot implicitly convert expression (tPre) of type int to TokenTyp > > Relevant examples from thedocumentation are: > enum X { A, B, C } // named enum > enum { A, B = 5+7, C, D = 8, E } > and > enum X { A=3, B, C } > > I tried moving the enum statement to within the body of the function, in case it was a name scoping problem, but the error message didn't change. | |||
July 11, 2005 Re: possible d error? | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Regan Heath | That did it. Thanks a lot!
So it was a name scoping problem, but not one that could be solved by localizing the declaration. I still haven't been able to figure out when I need to use the type.name convention, though I now *usually* get it right, I still don't understand why, and when I run into problems, I don't understand them. (Or, as this example showed, even recognize what's happening.)
Regan Heath wrote:
> Try what I have below:
>
> On Mon, 11 Jul 2005 14:22:13 -0700, Charles Hixson <charleshixsn@earthlink.net> wrote:
>> enum doesn't seem to be working as defined in the documentation...unless I'm missing something pretty basic.
>> The code is:
>> enum TokenTyp {tPre, tPost, tConj};
>> TokenTyp[char[]] tokenTyp;
>> void test()
>> { tokenTyp["if"] = tPre;
>
> tokenTyp["if"] = TokenTyp.tPre;
>
>> tokenTyp["then"] = 3;
>> tokenTyp["not"] = tPre;
>
> tokenTyp["not"] = TokenTyp.tPre;
>
>> tokenTyp["or"] = 2;
>> tokenTyp["else"] = 2;
>> tokenTyp["and"] = 2;
>> }
>
> Regan
>
>> The result is:
>> la1:~/projects/d/AIA/src2$ dmd -c errexample.d
>> errexample.d(4): undefined identifier tPre
>> errexample.d(4): cannot implicitly convert expression (tPre) of type int to TokenTyp
>> errexample.d(6): undefined identifier tPre
>> errexample.d(6): cannot implicitly convert expression (tPre) of type int to TokenTyp
>>
>> Relevant examples from thedocumentation are:
>> enum X { A, B, C } // named enum
>> enum { A, B = 5+7, C, D = 8, E }
>> and
>> enum X { A=3, B, C }
>>
>> I tried moving the enum statement to within the body of the function, in case it was a name scoping problem, but the error message didn't change.
>
| |||
July 11, 2005 Re: possible d error? | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Charles Hixson | Yes, a scoping issue. On the enum page: http://www.digitalmars.com/d/enum.html It says: "If the enum Identifier is present, the EnumMembers are declared in the scope of the enum Identifier." Basically a named enum creates a new scope, an un-named one does not, eg. enum { A,B,C }; enum Named { A,B,C }; void main() { int i = A; int j = Named.A; } Regan On Mon, 11 Jul 2005 14:40:06 -0700, Charles Hixson <charleshixsn@earthlink.net> wrote: > That did it. Thanks a lot! > > So it was a name scoping problem, but not one that could be solved by localizing the declaration. I still haven't been able to figure out when I need to use the type.name convention, though I now *usually* get it right, I still don't understand why, and when I run into problems, I don't understand them. (Or, as this example showed, even recognize what's happening.) > > > Regan Heath wrote: >> Try what I have below: >> On Mon, 11 Jul 2005 14:22:13 -0700, Charles Hixson <charleshixsn@earthlink.net> wrote: >>> enum doesn't seem to be working as defined in the documentation...unless I'm missing something pretty basic. >>> The code is: >>> enum TokenTyp {tPre, tPost, tConj}; >>> TokenTyp[char[]] tokenTyp; >>> void test() >>> { tokenTyp["if"] = tPre; >> tokenTyp["if"] = TokenTyp.tPre; >> >>> tokenTyp["then"] = 3; >>> tokenTyp["not"] = tPre; >> tokenTyp["not"] = TokenTyp.tPre; >> >>> tokenTyp["or"] = 2; >>> tokenTyp["else"] = 2; >>> tokenTyp["and"] = 2; >>> } >> Regan >> >>> The result is: >>> la1:~/projects/d/AIA/src2$ dmd -c errexample.d >>> errexample.d(4): undefined identifier tPre >>> errexample.d(4): cannot implicitly convert expression (tPre) of type int to TokenTyp >>> errexample.d(6): undefined identifier tPre >>> errexample.d(6): cannot implicitly convert expression (tPre) of type int to TokenTyp >>> >>> Relevant examples from thedocumentation are: >>> enum X { A, B, C } // named enum >>> enum { A, B = 5+7, C, D = 8, E } >>> and >>> enum X { A=3, B, C } >>> >>> I tried moving the enum statement to within the body of the function, in case it was a name scoping problem, but the error message didn't change. >> | |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply