Article ID: 166513 - Last Review: July 5, 2005 - Revision: 1.1

FIX: Typedef Type Causes C2275: Illegal Use of Type

This article was previously published under Q166513
Expand all | Collapse all

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 that this is a problem in the Microsoft products that are 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
				

APPLIES TO
  • Microsoft Visual C++ 4.2 Enterprise Edition
  • Microsoft Visual C++ 4.2 Professional Edition
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
Keywords: 
kbbug kbfix kbvc600fix KB166513
Retired KB ArticleRetired KB Content Disclaimer
This article was written about products for which Microsoft no longer offers support. Therefore, this article is offered "as is" and will no longer be updated.
 

Article Translations