DOC: Error C2213 Occurs When Base Is an ExpressionLast reviewed: January 8, 1997Article ID: Q67882 |
The information in this article applies to:
SUMMARYThe following keywords were first introduced with Microsoft C version 6.0:
_based _segmentVariables 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 _basedNOTE: 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 "based addressing" in the online documentation included with Visual C++ 32-bit Edition.
MORE INFORMATIONMicrosoft 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: '[' |
KBCategory: kbtool kbdocerr kbdocfix
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |