digitalmars.D.learn - possible d error?
- Charles Hixson <charleshixsn earthlink.net> Jul 11 2005
- "Regan Heath" <regan netwin.co.nz> Jul 11 2005
- Charles Hixson <charleshixsn earthlink.net> Jul 11 2005
- "Regan Heath" <regan netwin.co.nz> Jul 11 2005
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["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








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