Microsoft KB Archive/67882

= DOC: Error C2213 Occurs When Base Is an Expression =

Article ID: 67882

Article Last Modified on 7/5/2005

-

APPLIES TO


 * Microsoft C Professional Development System 6.0
 * Microsoft C Professional Development System 6.0a
 * Microsoft C Professional Development System 6.0a
 * Microsoft C/C++ Professional Development System 7.0
 * Microsoft Visual C++ 1.0 Professional Edition
 * Microsoft Visual C++ 1.5 Professional Edition
 * Microsoft Visual C++ 2.0 Professional Edition

-



This article was previously published under Q67882



SUMMARY
The following keywords were first introduced with Microsoft C version 6.0:

_based

_segment

Variables of type _segment are defined to hold a memory segment address.

With based variables, a base must be named to specify where the data resides. The base can be of type _segment, or can be a near or a far pointer. However, if the base is an expression, even of one of the types listed above, the following error is produced:

error C2213: illegal argument to _based

NOTE: In Microsoft Visual C++ 32-bit Edition, version 2.0, the _segment keyword was removed and the functionality of the __based keyword changed. In 32-bit compilations, pointers based on pointer addresses are the only forms of __based valid. In such compilations, these pointers are 32-bit displacements from a 32-bit base. For more information, search for &quot;based addressing&quot; in the online documentation included with Visual C++ 32-bit Edition.



MORE INFORMATION
Microsoft has confirmed that this is a restriction, although it is not documented as such.

The following examples illustrate the restriction:

This declaration is valid: _segment myseg; char _based( myseg ) *cptr; The following declaration struct sample {      _segment myseg; }rec; char _based( rec.myseg ) *cptr; produces the following error:

error C2213: 'rec': illegal argument to _based

error C2059: syntax error: '.'

The following declaration _segment array[10]; char _based( array[0] ) *cptr; produces the following error:

error C2059: syntax error: '['

Additional query words: 6.00 6.00a 6.00ax 7.00 8.00 8.00c 9.00 1.00 1.50 2.00

Keywords: kbdocfix kbcompiler KB67882

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.