digitalmars.D.learn - possible d error?
- Charles Hixson (29/29) Jul 11 2005 enum doesn't seem to be working as defined in the
- Regan Heath (6/34) Jul 11 2005 Try what I have below:
- Charles Hixson (8/53) Jul 11 2005 That did it. Thanks a lot!
- Regan Heath (17/66) Jul 11 2005 Yes, a scoping issue.
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.
Jul 11 2005
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; }ReganThe 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.
Jul 11 2005
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; }ReganThe 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.
Jul 11 2005
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.
Jul 11 2005








"Regan Heath" <regan netwin.co.nz>