FIX: Typedef Type Causes C2275: Illegal Use of Type

ID: Q166513


The information in this article applies to:
  • The C/C++ Compiler (CL.EXE), used with:
    • Microsoft Visual C++, 32-bit Editions, versions 4.2, 5.0


SYMPTOMS

Using a typedef cast in the member initialization of a class may cause the following errors:

error C2275: 'test::run' : illegal use of this type as an expression
error C2146: syntax error : missing ')' before identifier 'arg'
error C2612: trailing '.*|->*' illegal in base/member initializer list
error C2059: syntax error : ')'
error C2143: syntax error : missing ';' before '{'
fatal error C1004: unexpected end of file found


RESOLUTION

Use the actual type rather then the typedef. For example, in the following sample use test::run rather than test_run. Or, use the functional notation test_run (arg) for type conversion instead of the cast notation. Another option is to initialize the member in the body of function.


STATUS

Microsoft has confirmed this to be a problem in the Microsoft products listed at the beginning of this article.This problem was corrected in Microsoft Visual C++ version 6.0.


MORE INFORMATION


/* Compiler Options Needed : none */ 

    class test {
    public:
        enum run{ one, two, three };
    };

    typedef test::run test_run;

    class test2 {
        test2(int);
        ~test2();
    public:
        test_run testvalue;
    };

    test2::test2(int arg):testvalue( (test_run) arg) {}     //Causes error

    // test2::test2(int arg):testvalue( (test::run) arg) {} //WORKAROUND 1
    // test2::test2(int arg):testvalue( test_run (arg)) {}  //WORKAROUND 2 

Additional query words:

Keywords : kbtool kbVC420bug kbVC500bug kbVC600fix
Version : winnt:4.2,5.0
Platform : winnt
Issue type : kbbug


Last Reviewed: March 27, 1999
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.